diff --git a/README.md b/README.md index 80ab8b6..4c71548 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,11 @@ SHAInet - stands for Super Human Artificial Intelligence network -a neural network in pure [Crystal](https://crystal-lang.org/) +a neural network in pure [Crystal](https://crystal-lang.org/) + +This is a free-time project, happily hosted by NeuraLegion that was created as part of some internal research. We started it with research in mind, rather than production, and just kept going, also thanks to members of the community. + +We wanted to try and implement some inspiration from the biological world into this project. In addition to that, we wanted to try an approach for NNs using object-oriented modeling instead of matrices. The main reason behind that was, to try new types of neurons aiming for more robust learning (if possible) or at least have more fine-tuned control over the manipulation of each neuron (which is difficult using a matrix-driven approach). At the [Roadmap](https://github.com/NeuraLegion/shainet#development) you can see what we plan to add to the network as the project will progress. @@ -194,6 +198,66 @@ puts "We managed #{correct_answers} out of #{test_data.data_pairs.size} total" puts "Cnn output: #{cnn.output}" ``` +Evolutionary optimizer example: +```crystal +label = { + "setosa" => [0.to_f64, 0.to_f64, 1.to_f64], + "versicolor" => [0.to_f64, 1.to_f64, 0.to_f64], + "virginica" => [1.to_f64, 0.to_f64, 0.to_f64], + } + + iris = SHAInet::Network.new + iris.add_layer(:input, 4, :memory, SHAInet.sigmoid) + iris.add_layer(:hidden, 4, :memory, SHAInet.sigmoid) + iris.add_layer(:output, 3, :memory, SHAInet.sigmoid) + iris.fully_connect + + # Get data from a local file + outputs = Array(Array(Float64)).new + inputs = Array(Array(Float64)).new + CSV.each_row(File.read(__DIR__ + "/test_data/iris.csv")) do |row| + row_arr = Array(Float64).new + row[0..-2].each do |num| + row_arr << num.to_f64 + end + inputs << row_arr + outputs << label[row[-1]] + end + data = SHAInet::TrainingData.new(inputs, outputs) + data.normalize_min_max + + training_data, test_data = data.split(0.9) + + iris.train_es( + data: training_data, + pool_size: 50, + learning_rate: 0.5, + sigma: 0.1, + cost_function: :c_ent, + epochs: 500, + mini_batch_size: 15, + error_threshold: 0.00000001, + log_each: 100, + show_slice: true) + + # Test the trained model + correct = 0 + test_data.data.each do |data_point| + result = iris.run(data_point[0], stealth: true) + expected = data_point[1] + # puts "result: \t#{result.map { |x| x.round(5) }}" + # puts "expected: \t#{expected}" + error_sum = 0.0 + result.size.times do |i| + error_sum += (result[i] - expected[i]).abs + end + correct += 1 if error_sum < 0.3 + end + puts "Correct answers: (#{correct} / #{test_data.size})" + (correct > 10).should eq(true) +``` + + ## Development ### Basic Features @@ -201,11 +265,13 @@ puts "Cnn output: #{cnn.output}" - [x] Add more activation functions. - [x] Add more cost functions. - [x] Add more gradient optimizers - - [x] Add iRprop+ - - [x] ADAM + - [x] iRprop+ + - [x] ADAM + - [x] ES (evolutionary strategy, non-backprop) ### Advanced Features - [x] Convolutional Neural Net. + - [ ] Add support for multiple neuron types. - [ ] Bind and use CUDA (GPU acceleration) - [ ] graphic printout of network architecture. - [ ] Add LSTM. @@ -213,7 +279,6 @@ puts "Cnn output: #{cnn.output}" - [ ] GNG (growing neural gas). - [ ] SOM (self organizing maps). - [ ] DBM (deep belief network). - - [ ] Add support for multiple neuron types. diff --git a/csv_file.csv b/csv_file.csv new file mode 100644 index 0000000..c1ecb0a --- /dev/null +++ b/csv_file.csv @@ -0,0 +1,10000 @@ +0.7864277628458096 +-0.10732638718443344 +0.26730972578293866 +1.0416142122295555 +1.0416142122295555 +0.8971808518969183 +0.8596971933789557 +0.7540827076212847 +-0.04055337528494973 +0.5384428198150201 +-0.450640019494842 +-1.0893564602911479 +-0.5354341857082823 +0.17376685073337472 +0.41313838289058324 +1.2179927104171009 +1.8824054359637774 +1.1541491168268558 +0.6703374342869791 +-0.21723835682992443 +0.23190597984493266 +0.1765448455878087 +0.6108862021009058 +-0.034189376152200524 +-0.2206099631830477 +-0.2653402283263868 +-0.9860615278319111 +-1.103609876757277 +-0.4911201825567719 +0.005127024338332342 +0.22928817264821033 +-0.7205080192378852 +0.26406567392944935 +0.8995415821065869 +1.6372506215341869 +2.331047801610237 +2.658922038910624 +2.4177015253193352 +1.7329854448763378 +1.7329854448763378 +1.1381326401860419 +1.9928299481051623 +2.9209706893571576 +2.946084394039019 +2.0150789834673475 +1.7664651419324717 +2.1806258853537557 +2.8369154151812594 +3.8285759512600728 +4.483641128695272 +4.109420692633886 +3.9465136819837814 +4.738960025939027 +3.8222065900416475 +4.4989726791710485 +4.881417815367037 +4.544889954068159 +4.865303604687496 +5.067351036348554 +4.316421209633011 +3.6653914306289153 +3.429127765432804 +3.0216013400788295 +3.5108490024454166 +3.0365565428495978 +2.53564548228882 +2.9389317567633606 +2.304687048920683 +2.0857004739203306 +1.9567481676150198 +1.8617494893350024 +1.2617532533891278 +0.7133943557064664 +0.21059769116638494 +1.0021004424022968 +1.3512956624607437 +1.085135501586966 +1.085135501586966 +1.4553214651080986 +0.8472953087653383 +1.6217706884556105 +0.7396876017524241 +1.075250792016094 +1.5180553112163637 +0.9368304094936533 +0.7977193421405927 +1.3909356456850515 +1.7709555850530851 +2.0954618196141857 +1.7566701358413326 +1.8752454159078378 +2.482717038081482 +2.482717038081482 +3.290056146574358 +3.2278490921276473 +3.2278490921276473 +3.862126454050625 +3.862126454050625 +3.9092060484077327 +3.9092060484077327 +3.9092060484077327 +3.306288123182921 +3.2672554715746362 +3.5956777453702164 +4.069689079799877 +4.091080440882453 +3.9948069141299563 +3.095115173441299 +2.8541947686733513 +1.9583218348376323 +2.057301077501521 +2.8196696706134343 +2.822093383016891 +2.715516836165321 +3.408873671339083 +3.4422443566681533 +4.424245287017417 +3.6603159911806675 +3.6603159911806675 +4.23892869832849 +5.094333979240753 +4.504506387425295 +5.36488975863175 +5.510812482375413 +6.228788373206491 +6.228788373206491 +6.228788373206491 +6.1189668920378315 +6.586514582848999 +6.208495844250048 +6.357712042914442 +5.3697982949775165 +5.422228301048314 +5.385228588549554 +5.385228588549554 +4.669876187259052 +4.218709271145978 +3.423472279632274 +3.7610882064685836 +4.693446523468373 +3.7785727935796456 +3.642117635784005 +3.564520564805639 +3.564520564805639 +3.9029331084280745 +3.4472508993455304 +3.6965326721370264 +4.695105418364486 +4.362809288256043 +4.355992342626632 +4.489420910944071 +4.489420910944071 +3.6412549993026797 +3.7328936321444948 +4.340994859062304 +4.045146485078676 +4.101108849297722 +4.918736214954811 +5.4397796693161755 +5.380108762792697 +4.426952362034529 +4.644099387361628 +3.940930981459851 +4.631367296485986 +4.568836808354547 +4.860822545047957 +3.91708492457266 +3.91199862510656 +3.3844122481853582 +2.5579662825961536 +1.6926298993340008 +1.1618785685605584 +1.2269078798844826 +1.9147771634082502 +2.2560889039750007 +1.8076797981746022 +1.8796068230746636 +2.0939162907021807 +2.964634693473778 +1.9943886530940298 +1.7840555623075103 +2.320622036501778 +1.4399738234490675 +2.1730446346495813 +2.334067346351909 +2.653403481680381 +2.653403481680381 +2.5863524905670485 +2.5863524905670485 +2.617288089156683 +2.617288089156683 +2.7855637678665848 +1.8347831339483849 +1.2148621121577023 +0.969477337205115 +0.7911718802135652 +1.009109133003775 +1.658007995603755 +2.035474767149606 +2.2188524133577436 +2.3682646238205702 +1.7536399981282502 +1.334958474607637 +2.078314769674269 +1.3422210359143498 +1.8090136378827033 +1.6638536248449851 +1.0220792143123574 +1.499101191220495 +0.9234675785812909 +1.2144422378920985 +1.7467390863987344 +1.9689768439267035 +1.9689768439267035 +2.937829938137557 +3.358177805457884 +3.046433888277352 +2.785548420042142 +2.6366200871099563 +2.733376357088165 +1.9861255852199247 +1.0751348126943925 +0.5007520804758399 +-0.18822792533630128 +-0.12560323520391292 +-0.008528339570713639 +-0.34558948402227585 +-0.5047330982864866 +-0.7434064835645778 +-0.7434064835645778 +-1.4744163014954084 +-1.853369351026522 +-2.1053871784351563 +-1.7969649039408964 +-1.7045006942376122 +-2.4626548886857864 +-1.5911595705235795 +-1.1371265247795799 +-0.610047668431116 +-0.016400146853225106 +0.4024216214471106 +0.574959191939594 +-0.3058999333222807 +0.19593850214988628 +-0.11362594346564026 +0.03629500025827348 +-0.7487357029904241 +-0.37799121820099535 +-0.568502589242093 +-0.10890152958928567 +-0.5172854487053383 +-0.07353015767525639 +-0.636604336739924 +-1.118183136747313 +-1.5723824548388974 +-1.2414386919850675 +-1.2414386919850675 +-0.7706702438224431 +-0.9626873730667985 +-0.9626873730667985 +-1.7615532524686888 +-1.8221565743396404 +-2.693678979333246 +-2.081208705785228 +-2.0519083733322927 +-1.7897288174036279 +-1.9390103702026096 +-1.9390103702026096 +-1.8748943185755649 +-2.3197496966378837 +-2.437402358810397 +-2.2539623631833177 +-1.2731895948485175 +-1.6653029598544746 +-0.7675840869315782 +-0.43843102706502224 +0.1534370262996776 +-0.08379012078249126 +-0.5658292287710807 +-1.156813882621619 +-2.051284124592851 +-2.051284124592851 +-2.569829498386401 +-3.3629359032583155 +-4.108801130480698 +-3.1956535119184797 +-3.115497591305897 +-2.792748244163032 +-2.6860705072950735 +-2.4185234689070043 +-1.4757799720146487 +-1.244789381647014 +-1.0061370063776105 +-1.5609256620547498 +-1.6875808748505534 +-1.480855083975626 +-1.4556015390713477 +-1.6306125524357094 +-2.052530944795378 +-1.847741428140986 +-1.3958839885484564 +-0.9900685048777134 +-1.956166785630867 +-1.563047240877981 +-0.8208897354487454 +-0.9883399275687398 +-0.16185442866028488 +-0.15914955346209247 +-0.2300637838844386 +0.739065145431389 +0.6962687129962043 +1.0764749367050683 +0.1760599752023695 +-0.6002678924415954 +-0.6881090260815649 +-0.044363096224708465 +0.6196351720554109 +0.92004054595418 +0.07087166421979074 +-0.9200983637733063 +-1.0279973535450606 +-1.3508913857461318 +-1.1225945883336574 +-0.326303436118619 +-0.326303436118619 +-0.22326373581887404 +-1.192394764325155 +-1.463197943713614 +-2.4398009511470145 +-2.3027305781177914 +-2.4143230602180417 +-2.4143230602180417 +-1.8607389697996104 +-2.4031709787193427 +-1.651715615229856 +-1.0748051497223698 +-0.6942851727919683 +-1.430590549417322 +-1.430590549417322 +-1.8515550110052494 +-1.0119725108883406 +-1.4515221168624235 +-1.0064142422365538 +-0.06467011303087267 +-0.7933714147992512 +-0.01651463481017723 +-0.7672448459179395 +-0.32564933209363534 +-0.7079220737447672 +-0.18961508754777456 +0.18147822587764806 +0.5275167409377243 +0.5275167409377243 +0.743092503867054 +0.25575809824041307 +0.2483355093033509 +-0.5114452212325628 +0.02420056065702536 +0.8151468088280526 +0.5671315739693552 +1.090984342471328 +1.9352243909243376 +1.355225269998968 +1.852389998247203 +2.7341025523873403 +1.9783096150272164 +1.786026062931633 +0.8714004205753227 +-0.08928643680778037 +-0.7206823104565119 +-0.05002714131298314 +0.1854590858374301 +-0.06477464283388101 +0.16604458463778105 +0.8224146277019454 +0.8224146277019454 +-0.1745933516833097 +-1.1547388146225397 +-0.35688392801316504 +-0.6254115600673534 +-0.07619306208988419 +-0.8172359810660997 +-0.2280200007997285 +0.48482160695595045 +0.4774457875261964 +1.4126412148039942 +0.5235996817808861 +-0.06465894675245676 +0.8493218489026104 +0.9175123863917412 +1.054273391440624 +0.4760451215100072 +0.3347169649627356 +-0.5766683191085867 +-1.220865327500701 +-0.5704348812590985 +0.02288845732520106 +0.4841066775687657 +0.4841066775687657 +-0.025971760167257996 +0.2891692552130014 +0.3670677235624218 +-0.13299164489270887 +0.011761485455440868 +0.8076666193930502 +0.6790660165478472 +0.7471752611360939 +0.5591751224252437 +0.23844390654499337 +-0.5638291356650066 +-1.1807853925210807 +-1.2355717880018466 +-1.9900078093123574 +-1.0664865348658492 +-0.4616030247970555 +0.12909064375842205 +0.9067152114198682 +1.414306341909814 +0.8075024205496555 +1.0373775844847366 +1.693591640798202 +0.7595015058760468 +0.7242083913717668 +0.12487850151664082 +-0.04945592843418978 +-0.8759298936609103 +-0.15786859913629114 +0.338932025600323 +0.8627019348254996 +-0.037805801619936075 +0.7667887677786613 +1.2261116763357118 +0.49951598559807375 +-0.39703178957486496 +0.49411035939661785 +0.6156163638273979 +0.23859682858551168 +0.17202300106339452 +-0.5278729548874628 +-1.1921033500726181 +-0.5917897631755675 +-0.7489485489289619 +-0.30925419101528806 +-0.30925419101528806 +-0.6624432936064426 +-0.3680599141789116 +-0.9593995283201808 +-0.39235145192600274 +0.06410414430443545 +-0.3713657415355224 +-0.6512736566262474 +-0.3696535532479215 +-0.417331913567769 +-0.8560825122228355 +-1.1779457072168302 +-0.7680297998169887 +-0.3895069169907277 +-0.6879302624655707 +-1.3752215112491433 +-1.6518579002266627 +-1.3168241991583554 +-0.6843139802266116 +-0.3305909196679997 +0.0779581199584316 +0.39205832874736624 +-0.0006196469353071388 +-0.6936556213033495 +-0.07764507692600853 +-0.5417227464296392 +-0.5330432905888915 +-0.029563961567407038 +-0.8330094923549054 +-1.2690884590784623 +-1.8854233235963416 +-1.2511782122105837 +-1.6939827655251714 +-0.7295281260995163 +-1.0695448386418787 +-1.2197617746908311 +-0.3870809552961967 +0.42692969298894967 +0.39150287581443355 +-0.5157647343391444 +0.38983194521440157 +0.8788549788241148 +0.5721755729527092 +1.534341682247834 +2.1592609515003263 +2.1099364008823573 +1.5517617951016962 +2.217352547127472 +1.8254702469650037 +1.7478439609319167 +1.7630206963635084 +1.7563590951704007 +1.2017674527153723 +1.9212450332754842 +1.3850332308225863 +1.7167150494690018 +2.396815523049021 +1.8450887522671249 +1.7302092229748238 +1.599796004234502 +0.9927737985038307 +0.18219270346241334 +-0.335060951930759 +-0.18579629787477892 +-0.9906457103147024 +-1.0189166660386957 +-1.3413692730310243 +-1.1914961269397952 +-0.2565160049251858 +0.5588332413957986 +0.4837119957149788 +-0.26921205301762174 +-0.7059672797143219 +-1.4123226953455832 +-0.5125482278362179 +-0.6489856528199401 +-0.5705442466209995 +-0.9225655877000054 +-1.1276545294843072 +-0.672959970247061 +0.17459978427386091 +-0.1770770576115951 +0.32735766975634994 +1.1781562747729937 +1.8564630975003165 +1.3855950483041397 +1.9435543821183117 +1.2180205482833462 +0.9318630411132592 +1.3862664356433547 +0.41896349740765704 +0.020918743544210305 +0.5779612626853999 +1.565814414022411 +1.8425742844005586 +1.2274840509502012 +1.970648398670913 +2.5549946730109943 +2.556642956135388 +2.9829695952882007 +3.2842256260202447 +3.0361614653869373 +3.3822059898277654 +3.50064550038595 +2.5786339845501756 +3.310803694800498 +3.596190261805199 +2.7340639612849538 +1.9939517127271547 +1.9018857668209401 +1.0887662644389133 +1.049384256310066 +0.7369733543677174 +1.305428551663792 +1.9269512914291547 +1.807096221744001 +2.3663859578984825 +1.9594650561653641 +1.7438013908127434 +2.2848343176706436 +1.8335290659324 +0.949649049285912 +0.9949340018884099 +0.9949340018884099 +0.8690905233507703 +1.7892445308674296 +2.1976782255247387 +1.6437205137850528 +2.2692746406568323 +1.681748579380255 +0.9885255114962244 +1.0645127452088876 +0.6503374518739434 +1.1693780050115952 +1.1693780050115952 +2.071454456994325 +2.2532567146062563 +2.2784381836752625 +1.8007764057933917 +1.4705078007631562 +0.7566269073466025 +-0.11619037824824718 +0.6105655223751503 +1.5333428724687972 +0.7701620107296603 +1.1632504477307803 +1.1468042800583835 +0.41425346568984844 +-0.18858119371145565 +0.5153993657756273 +0.3601233122617008 +0.3601233122617008 +0.15752282797090267 +0.7095179848934352 +0.42843580231584333 +0.5356499063530923 +-0.20008273330742654 +-0.963244573911448 +-0.8704894308973842 +-0.5159666512428994 +-1.022978009869199 +-1.4492257000658384 +-1.9647611364272544 +-1.9647611364272544 +-2.3654281830612933 +-1.7462575394996163 +-1.3329088663413682 +-1.3135938690869895 +-1.4386770361206334 +-1.755416111563921 +-2.4284414549985636 +-1.6436413356720483 +-0.803838559981652 +-0.8827183526777179 +-1.0588267257968385 +-1.0335934225733168 +-0.6794362715248528 +0.044746640490902045 +-0.4148448986704415 +-1.0232856658003358 +-1.0232856658003358 +-1.4161745956272704 +-0.6856403917411678 +0.13563222422814425 +0.4791515196673073 +1.233492913562306 +1.043259381747319 +0.47092314158077064 +0.01886427492273135 +-0.8138579241956859 +-0.878401394725344 +-1.5025640643921097 +-0.7494468545034225 +-1.3778560214049242 +-1.3778560214049242 +-0.6060917602362457 +0.2800980765086343 +0.3075565754730063 +0.8817546092707278 +0.5670572105713217 +0.08897284729247557 +-0.37319055895877307 +-0.6730922616422648 +-0.9103169214308983 +-1.2527185618327819 +-1.7497182722667803 +-1.0744688119861223 +-0.9032479312001314 +-1.5178565014012446 +-1.9698908054509876 +-1.595884385316683 +-0.798372226781664 +-0.5156739033022897 +0.034750875869792974 +-0.6766974885649046 +0.2648099683021603 +-0.4220259922635248 +-0.875145808224136 +0.0329973913117273 +0.9059487005176609 +1.2584574973665528 +0.983689633688465 +0.5559585800746554 +-0.24482117479091126 +-0.8827709089750575 +-1.2181409306892683 +-0.6263788262321575 +-0.6322844588480886 +-1.450776631990463 +-1.137936923744097 +-1.2075568054209298 +-1.7522596089529954 +-2.698941806416049 +-2.5538684510870535 +-2.9205987664584754 +-2.5216998854728336 +-2.3542043558600216 +-2.544352185014303 +-2.0682730622522216 +-2.5759269388326302 +-2.0566828352127082 +-2.26483068243734 +-1.4926682087736518 +-0.5226030771404087 +-0.3075704781047617 +-0.6533862423664768 +-0.6884220054737835 +-0.9410875515749969 +-0.9410875515749969 +-0.9095001524452743 +-1.9000065894982403 +-1.349553218508395 +-2.1999603231235607 +-3.090582408781046 +-2.1846753856388426 +-1.9606461694050887 +-0.9764958944049833 +-1.9491868713479052 +-1.6834211866707753 +-1.4461020172860783 +-1.297393221498363 +-1.942074364547663 +-2.225930631451983 +-2.144995583630368 +-3.010803820692048 +-3.8206425333365868 +-3.3744872413845215 +-3.685010072383932 +-3.9273029389041016 +-3.1891383073221524 +-2.870488805301722 +-3.3496884563086873 +-4.334575472446047 +-3.8322525820667206 +-3.982799890949019 +-3.982799890949019 +-4.9292690945872435 +-3.9675104568383377 +-4.0034597531058616 +-3.1649624504168417 +-2.596436873965511 +-1.9848073236976425 +-1.4119051321486367 +-1.0771845758353435 +-1.1721651468571501 +-2.1684000370827228 +-1.925830111007523 +-0.9826797713329292 +-0.1509821414529917 +-0.8496692998033599 +-0.22887977260237724 +0.23537087658998668 +0.563896454625415 +0.7201665905925423 +0.6739453537203995 +0.8735021931851886 +0.26133309239515323 +0.06303684316337033 +0.3858195802373672 +0.7940130032980142 +0.41058132739377695 +0.8857231653364047 +1.2622429244643945 +1.2229275425558233 +1.5626025818737506 +0.7009131338071117 +0.06456999368838212 +-0.020772295817130693 +-0.6001752038617222 +0.3056424717782308 +1.0549343202938593 +0.16709554728041187 +0.6112656617565868 +1.3465932630048876 +1.7600383120561351 +1.7020079387085474 +2.0484525513977387 +2.0484525513977387 +2.7615745456560736 +1.7861587418891736 +1.4815172612803318 +1.274928461392646 +1.3654039969484077 +2.1427620627418813 +2.655253402185078 +2.2648468326853286 +1.7205592603422364 +2.1852492723822916 +2.9605793445166744 +2.9605793445166744 +2.363806132092597 +2.613635737186844 +2.9513580670801716 +3.595804028888188 +3.861742550931092 +4.427726866342916 +3.804704808201487 +3.3401815721797923 +4.107453460410249 +4.260504963463035 +5.145611764683202 +5.980166339426866 +6.92394699533227 +6.70807086379746 +6.7062459271533506 +5.799634001186526 +5.799634001186526 +5.09532024203304 +5.4247737909113765 +4.9724124287607 +4.119816634203858 +3.7584537152773905 +2.970265759807772 +3.31944689185024 +3.2854599542452076 +2.375850498203496 +1.7899748182479136 +1.6570023141071712 +1.1327842217571291 +1.9271347836131756 +2.803501056648196 +2.803501056648196 +3.3587726584517874 +3.4594669223983443 +4.434679466392666 +3.901468800613065 +4.802046296847597 +5.222578184446916 +5.222578184446916 +5.97744496469296 +6.779239207470396 +7.715938242785142 +7.5818017471443895 +7.5818017471443895 +7.214979505294771 +7.214979505294771 +7.519129189574855 +7.519129189574855 +7.556489730088682 +7.556489730088682 +8.113863445130963 +7.689615831180399 +8.600330886897424 +7.690167499113581 +6.916908094363255 +6.916908094363255 +6.656409461640728 +6.678533508821546 +7.59001157127382 +7.138327573544595 +6.8303905864888 +7.326411577679379 +7.326411577679379 +7.326411577679379 +6.613465286387127 +7.453590254047137 +6.6931197139798675 +6.1249891082246855 +5.7724856978628605 +5.665731488955399 +4.781082014504252 +4.819978756893313 +3.837460270534559 +4.5914165929075414 +5.463896175776571 +6.1356740621635595 +6.722638233018337 +6.390183483077402 +5.460739208136438 +5.271252064176377 +5.271252064176377 +5.3631054527992745 +5.486994916681943 +6.130791486768251 +6.130791486768251 +6.914830552937618 +6.365680666559788 +5.46964689868349 +5.948990516322854 +5.451526669515377 +4.467024435432968 +5.395579463303478 +4.661330450002637 +3.6917308396865494 +3.1246668512512947 +2.9129460913732634 +2.0773471725372654 +2.9665596094892672 +2.4071519172519626 +1.890148041141781 +1.7001578207968597 +1.497210454192777 +1.3669344291056627 +1.3669344291056627 +1.6175444169027418 +1.0433577222456634 +0.19892349855978408 +0.8551233705929233 +0.8020183036515299 +0.17588547491136708 +0.1771200475579956 +0.8888987631783972 +1.3722110533565575 +2.165803288025411 +1.2210718289424662 +0.9289455114545567 +0.200599086322517 +0.7633895359105299 +1.204549162410347 +1.5223547861875042 +0.8480774942978009 +0.160264868485394 +0.08864978854763905 +-0.4465292736909757 +0.48398749038193734 +-0.20521812434416076 +-0.2688740468281581 +0.5238697014885803 +0.5238697014885803 +-0.15543812921216715 +-0.1980739378955093 +0.02133056430001623 +-0.668574462714972 +-0.6551497654930075 +0.10291460975207711 +-0.17484476439978636 +-0.9758750508930665 +-0.5486704850874393 +-0.1891395465129284 +-0.5242791509698396 +-0.1453725329250729 +0.5929938220039882 +1.2038077589927183 +0.3856618456541725 +0.6434029739465501 +0.13621863675910362 +0.1018447611343073 +0.093017665549882 +0.7863636809947006 +1.2737445632321154 +1.9131191047197529 +1.8013407980892389 +2.398431835354084 +2.437481787297468 +3.3408191391967823 +3.3408191391967823 +2.746647608331065 +3.0010085619578564 +3.060592034575997 +2.0691998785748726 +2.557585400481132 +1.5742754940354837 +2.0428380585103807 +1.17320028757208 +0.3240210839832114 +0.739651376734874 +0.3008460190444574 +-0.3498801697987949 +-0.920166100968217 +-1.8237001425029877 +-2.711203566325576 +-3.1394327415952032 +-2.8587778357478992 +-2.33135038984465 +-2.1957412859458474 +-3.1860406124970453 +-3.1406588785850795 +-2.2169959499156855 +-1.7297060923054286 +-1.4602928157812762 +-1.8448782277088798 +-2.068214102118501 +-2.0897931158019403 +-1.4515752843927772 +-0.8931770285860618 +-0.7982211772103416 +-0.9540141066069258 +-1.3261620156663512 +-0.8727725211388448 +-1.5589892310716729 +-1.8874527505158345 +-2.0798105560610947 +-1.4573829891235401 +-1.2974491676543825 +-0.5539443527759236 +0.3588866045329082 +0.4974218095765639 +0.4375374867779459 +-0.4958588883963314 +-1.4601432845191717 +-1.4601432845191717 +-1.9989903711312047 +-1.9989903711312047 +-1.4055536746951425 +-1.7198279193270447 +-2.6432137193840264 +-2.9216866704305278 +-2.2382850394204237 +-2.20632490342978 +-3.1228284704051785 +-2.5278634619845897 +-1.7892746622901605 +-2.204593403498506 +-2.9665755284498028 +-2.019445280524831 +-1.5102175830338866 +-1.9272413373284625 +-1.6733515292844863 +-1.8564657126083288 +-1.7486507196675074 +-1.117492376063994 +-0.8534271206724402 +-1.4670081941342958 +-1.4450947032659072 +-1.4450947032659072 +-0.9919487987556603 +-1.835334210283297 +-1.4336718445519463 +-1.3144981713988413 +-1.5739184078683657 +-1.841689781913598 +-1.5693323137180935 +-1.2634896591338003 +-2.096878272717672 +-2.623945198965015 +-3.4588795318087406 +-3.2025472027865316 +-2.909874072893577 +-3.2745988656779232 +-3.360724913309146 +-2.6677063009716684 +-2.1724872435943388 +-2.3527048926928447 +-3.0443136768447516 +-3.3205765166076517 +-3.4395275038045705 +-2.5285245029205 +-3.460349246118052 +-2.7034383318459083 +-1.7301646847188668 +-2.705920530797762 +-2.7422319065841054 +-3.028802806954872 +-2.904520778000288 +-2.301339477754366 +-1.5155085246622708 +-1.4556385544476207 +-0.7642964921002358 +-1.1368087736773052 +-1.1605186449087195 +-0.1808284232137447 +-0.34362259435010023 +0.10906205044611406 +0.7243138359574935 +0.8454114888937266 +1.1301339885345354 +1.0000605288214004 +0.9650871079061186 +0.40956116761421624 +-0.11738591599223647 +-0.7985921608924299 +0.09218766271508538 +0.5590234005844089 +0.7666148810172521 +0.7451760574771304 +1.246563207073541 +0.6407903306151903 +-0.2618696272769414 +-0.6681468000700742 +-0.8086394694812888 +-0.6524099554749343 +0.20072582516458892 +-0.4343961927947644 +0.3003059659992704 +-0.5112304077960723 +-1.2941567985510258 +-1.6667026174951585 +-1.4566265737262887 +-0.5667584284623524 +0.0071396199531930105 +-0.0511103168866488 +-1.02852236378645 +-1.123067062142583 +-1.2596471785919343 +-1.669306515444152 +-1.4971206989075787 +-1.2511106415336937 +-0.39196629866282184 +-1.3748604660766681 +-0.9925061271659144 +-0.3467141650297001 +-0.3792041716351414 +-0.37143866279613735 +0.03349000054056128 +0.43741009074678894 +0.5833558240955298 +-0.09619608673982316 +-1.0211135169813281 +-1.3153648741219919 +-0.860068506225546 +0.04103638214687333 +0.006032521973665772 +0.2551340202268394 +0.8631731803561681 +1.5151744650906935 +2.366170718008216 +2.07917968496376 +1.761141365092164 +2.24822297427208 +2.2851873428191833 +2.190050304377519 +1.2995572513997353 +1.4940331283241448 +2.07428645074708 +2.07428645074708 +3.0711543398277557 +3.0711543398277557 +3.693385056036129 +3.2978513732121186 +2.7554865544438876 +2.7554865544438876 +2.210938852565455 +2.1895872094722058 +1.7463439362528184 +2.237307927002405 +2.237307927002405 +1.4034758271683851 +0.4775848980937858 +-0.31685164979798897 +-0.5222344243532363 +-0.447118744156645 +-0.9328740144774614 +-0.3659926819183281 +-0.9808716459916766 +-1.7881552043356272 +-1.0666246091339429 +-1.8552143908606833 +-2.1250048606106238 +-2.031907321370526 +-1.0975786487902897 +-1.1479601325334343 +-0.36357900974163915 +-1.1716695282250444 +-0.7007060398935274 +-0.9831164641928204 +-0.041018180207193944 +0.06076410561696177 +-0.004931692873844318 +0.5720573221081862 +0.8564412771408516 +1.0134266915529826 +0.5268772987393217 +0.7921317622623553 +1.5258250236449018 +1.357773035998083 +0.43505195707399724 +0.43505195707399724 +0.3936973627671617 +-0.06107315659207746 +0.5921918191936413 +1.0654901532688248 +1.6091456543458647 +1.2928398940142238 +0.8785921232760724 +0.3011120547259293 +1.24185883950579 +1.24185883950579 +0.6499576482945932 +0.8594596301266819 +0.6069351629521197 +0.2013656495646603 +-0.4602575668076545 +-0.18705073966576768 +-0.2690917054323513 +0.04708216920508279 +0.7268226703042521 +-0.1425776269637461 +0.840083155364525 +1.764743363305334 +1.764743363305334 +2.178961431508438 +2.712077601751956 +2.37041533889353 +3.11989832094528 +3.1741758185724542 +2.3163098926832744 +2.897228988726581 +3.284826307913646 +2.5868583969623593 +2.0994200463726855 +2.0124487413684102 +2.2072258378590446 +1.7242800375418295 +1.8956278036691752 +1.5107680495372051 +0.650027667690281 +0.6938930391120777 +1.4659908268775734 +1.1030568099674656 +1.2791515022310749 +1.5642237474027152 +2.423078875344025 +3.120259389118635 +2.9871192423904933 +2.9871192423904933 +3.2405206596832987 +3.361732699067278 +2.7137127487954977 +2.151617077282902 +1.8357183351953417 +1.443637177764495 +2.2977093667913295 +1.3847024993164714 +0.4205666795554035 +0.9228330664756612 +0.40322560143048314 +0.31501305800839574 +0.48963732881495725 +-0.02205126225616183 +-0.571527133117819 +-0.9894167015390649 +-0.254688586625313 +0.5362994095490379 +0.00479520281715673 +-0.3291413386105061 +0.4121029029792841 +0.737341107908346 +-0.006343817273967489 +0.7823595249793683 +1.1242094627647155 +1.0827458454983376 +1.232152720956241 +1.1945993051182278 +1.677833746722638 +0.9076596692774188 +0.9297435320876928 +0.7960664257836284 +0.4353931352901319 +1.2160916892074862 +0.34536413547827594 +-0.10925629407863535 +-1.0906234244293191 +-1.9185817591321823 +-1.8298199721881099 +-1.0400774277409823 +-0.5179459819350538 +-0.1846260783880338 +0.6036804341241129 +0.6306741126001298 +0.2627631561100413 +-0.6650813524415903 +-0.9048078313322656 +0.027303000958549317 +-0.5209041581334748 +0.1629796312866465 +-0.24989877345729272 +-1.102176472567439 +-0.8082177635189054 +-1.3705738465153987 +-1.3522838523445528 +-1.4524527737702773 +-1.1433482104654644 +-1.2892279128001394 +-1.1895607820078369 +-1.1895607820078369 +-1.7315716680416173 +-2.439617430359788 +-2.439617430359788 +-1.8976171540433642 +-1.8976171540433642 +-0.9366357929323124 +-1.1766134486155493 +-2.031702271481495 +-1.3288756386253104 +-0.6107791024987386 +0.07575250693321123 +0.1994356831570394 +1.045475437744801 +0.1364588721739557 +0.5969523044641172 +0.17802265476956303 +-0.6341635282297774 +-1.2673638694343379 +-0.3133483952691609 +0.03340978948163498 +0.18178733436105254 +0.6372313039116242 +0.7203309285434447 +-0.08835265311220564 +0.26027633500960023 +-0.26244328505804027 +-0.0484136574658065 +0.12744431118327304 +0.2708204625052253 +0.0784626779151184 +0.42350301159483295 +1.2990662626863148 +1.2398198344890417 +1.4227628381533564 +2.3431067010736735 +1.523618507212288 +1.012370215442098 +0.7978055597440211 +0.4822946549870606 +1.380570276557399 +1.1570229632770976 +1.8660576668110012 +2.703667879994712 +2.703667879994712 +2.703667879994712 +2.1422279716715025 +2.312426835543186 +1.373402108462367 +1.373402108462367 +2.268182653458961 +1.59852987662129 +2.5865843664706745 +2.2513340187507387 +2.292389425056646 +2.4647733143021906 +1.6913605100499518 +1.4626326960734 +1.4626326960734 +1.6999593879113275 +1.0096520207954185 +0.3678817319107861 +0.3678817319107861 +0.8245135679870113 +1.68621224226517 +2.2902022560302506 +2.6752638945793157 +3.1076535649673924 +2.3585001344709093 +1.4826251120829739 +1.4956858421841217 +0.6134518184371702 +0.2021604184249638 +1.1432792172480735 +0.4763414181188166 +1.2903976716360546 +2.2373985636364426 +1.4662427036771037 +2.036832167507127 +2.6767600903156445 +3.5347199747030107 +2.6250515588021353 +2.6250515588021353 +1.8951681405022027 +2.7013101597624933 +2.5603013936602084 +1.8618175674121349 +2.6972788748515226 +2.0074513932175115 +2.5720521077146987 +2.5720521077146987 +3.4127669198155686 +2.9348859829436518 +2.686693311019919 +2.1215979458594534 +2.6228301717326223 +2.9497087762174887 +2.3200929520559876 +1.3674545141154362 +0.8834481162098266 +1.1696376546340561 +1.1254323747771622 +0.21920680031161566 +1.0413935633678078 +0.7213082458284533 +0.9970666115045527 +0.35539767878257933 +0.2907995709865716 +0.07998048362080412 +-0.2628722682276825 +-0.14984667768768278 +0.5528310909974925 +1.5250996894991393 +1.1631521344675164 +1.0474734800733172 +0.11690114356499826 +-0.4803517592362909 +-0.6139447816930746 +-0.5827496672876645 +-0.9769225291074832 +-1.3694775215593231 +-0.6004584648460229 +0.2009336146421712 +-0.0053780318715693776 +-0.25721845798512355 +-0.5867901436575135 +-1.0594313115934315 +-0.6150273719119712 +-1.5729038065235437 +-1.6268729106432267 +-1.4055107127137583 +-1.80776452353158 +-1.80776452353158 +-1.0837170154253124 +-1.8150275620968186 +-1.7671346471615628 +-1.507094305221007 +-0.6108086536562498 +-0.9156382535666824 +-1.1481654787353655 +-1.2681535656478689 +-0.3004687901907206 +-1.2058771630522558 +-1.307580595364065 +-0.8060336405954518 +-0.8060336405954518 +-0.7797768861119059 +-0.47246541738025605 +-1.12392602822073 +-0.6387545216455122 +-0.2144035751651805 +0.21103732482224924 +1.0416338113833585 +1.6627472205565357 +1.0264568702492447 +0.7884447277295844 +0.25077483578576387 +-0.22116300635049213 +-0.013408436855376404 +-0.4920504140533485 +-1.304584537529577 +-0.7376074207152219 +-0.6866226720504804 +-1.618051557885602 +-2.192905587490534 +-1.7156358619537353 +-1.7156358619537353 +-2.5191598066448164 +-2.4396435807462304 +-1.9150566408989533 +-2.6441480705094875 +-2.0162500493434 +-1.105140962854821 +-1.9399758107799054 +-1.852860163566637 +-2.177955537640943 +-1.6952033507382596 +-2.142698187878388 +-1.8642422217486652 +-1.9502485266824139 +-2.2665728607438598 +-2.752387116690716 +-2.6790704572969113 +-3.060716727974528 +-3.718442060245322 +-2.9306816277708143 +-3.3275856052670063 +-3.3275856052670063 +-2.937941476048366 +-2.937941476048366 +-1.9893861796021797 +-2.415668699941624 +-2.1640430074136185 +-2.2551868729969886 +-1.3983421250355308 +-1.6365088615577807 +-0.6397319636124359 +-1.4839839862256388 +-0.5240542209875878 +-0.5240542209875878 +-1.271676276782534 +-1.3871161558104075 +-1.972085831936758 +-1.972085831936758 +-1.9984114007097826 +-1.7904067820210432 +-2.774349803862205 +-3.3712801635298018 +-3.1624744598112375 +-3.8323477284488194 +-2.8936029738023565 +-3.8817380220144164 +-3.8817380220144164 +-3.0882365618547225 +-2.341404816001517 +-1.5470945326613403 +-1.511051085250382 +-0.756775059267965 +-0.756775059267965 +-1.2675016994999264 +-2.258836099900543 +-2.533296833368904 +-2.665838631161653 +-1.9554671343671572 +-2.0353405941501266 +-1.3132881721259269 +-1.1620020134963198 +-1.1620020134963198 +-1.994963061509477 +-2.332021475915785 +-2.83989424492544 +-2.619012169278461 +-2.7254100357615405 +-3.065735073512453 +-2.440132137145783 +-1.990754752493872 +-1.990754752493872 +-1.7229420505005575 +-2.4330739108571207 +-2.6680506465593634 +-1.7000710106796868 +-1.8637724903941826 +-1.012567469253058 +-0.8655100664204471 +-0.47985005006772763 +0.06683894310101013 +0.9999871265681026 +1.644458554007802 +1.2022897896447207 +0.2934045170294559 +0.35646704927481676 +0.29286355492209093 +0.9087627790087446 +0.9087627790087446 +0.023570123086848915 +0.1701761835827299 +-0.7476246351698527 +-0.7476246351698527 +-1.3962757776514794 +-2.0017722474853907 +-1.3432584064748412 +-1.2425827523291963 +-0.9377991745333218 +-1.3581768602830837 +-2.127445900582118 +-1.5254281206777096 +-1.650867067467071 +-1.650867067467071 +-1.9951215666754654 +-2.8495351121196655 +-3.690963170311308 +-2.736926744177894 +-2.6555868038781307 +-3.296822845703584 +-3.296822845703584 +-2.520039228027199 +-3.3152328751344156 +-2.508874000960623 +-3.237345593700253 +-3.1866380857876666 +-3.8237150628432217 +-3.8826604626870886 +-3.662885653852805 +-4.6516941303740635 +-3.703956924271332 +-3.7160878090684997 +-4.178679855064223 +-3.6185581224791843 +-2.7428963948313765 +-3.22033993574696 +-3.040152346686847 +-2.888620514268083 +-1.9160056981836482 +-2.6702323173185265 +-1.7488061511746706 +-1.036938809761937 +-1.4326135843044998 +-1.8585395345777087 +-2.239006810679796 +-2.3942537679823452 +-2.8497343365981394 +-2.8497343365981394 +-3.359715245193756 +-2.57184470534951 +-2.57184470534951 +-2.3793118421856705 +-2.3793118421856705 +-1.8871179565849705 +-1.7106308175703067 +-0.7769947824494787 +0.19070706535944248 +-0.6544574601902249 +0.2469673877727121 +-0.422750356587434 +0.17621735254673587 +-0.03797420032096388 +0.41166175646165615 +1.2792147994464003 +0.5695350761211162 +0.9503232916176165 +0.46093263213449986 +-0.32508181794338176 +0.3237787487809559 +0.7590138737080737 +0.4405363463368377 +-0.05163507837459014 +0.4811069265066069 +-0.011814908821307313 +-0.34882114124819774 +-0.0982289046840289 +-0.27731229731071694 +-0.4524539604724934 +-0.09693019464725638 +-0.9086321995264276 +-0.8159091015610255 +-1.1983045668969086 +-1.1983045668969086 +-1.276111683852065 +-1.1427883015247173 +-0.8635812462748376 +-0.2047175296430701 +0.00483707652622245 +0.6801290410776288 +0.6236055786885332 +0.7331864073270792 +0.8502021161875984 +1.102890644863825 +0.2576228519937511 +-0.15350831388015795 +-0.2453536380112613 +-0.6341144696774491 +0.15787565519337476 +-0.28698176517196416 +-0.18464275951413978 +0.704137604853079 +-0.06080075534374774 +0.9196404576684256 +1.0194259499531626 +0.3430883204908006 +0.5901573104159297 +1.3507793251742803 +1.4457235241044626 +1.4739708439897012 +0.7047088538073132 +0.017004948633840833 +-0.44325614366580457 +0.3996108330625875 +-0.4464748936214781 +-1.0764801644499284 +-0.5549735122813961 +-1.0670400338169543 +-1.6345373148525015 +-1.530970400397745 +-0.8967463249775824 +-0.6880838461971268 +-0.8777399645738396 +-0.8777399645738396 +-1.0401047365682365 +-0.80337527004014 +-0.058424840511210885 +-0.05700124924978067 +0.36399565546854173 +0.5041405058212463 +-0.021948418436962935 +-0.929995213493749 +-0.268012817027123 +0.13605919123354182 +0.13605919123354182 +-0.8041915025877393 +0.15845488327761093 +-0.6863366757925102 +0.08863095368920848 +-0.4254676434987079 +0.03496804896175143 +-0.3362017896175883 +0.4773691030591206 +0.021795284053588437 +0.3144988682304968 +-0.12767786307101792 +-0.9327600593514035 +-1.012093530304001 +-1.720307384764594 +-1.8204649940006958 +-1.341782232845711 +-0.37615080535324363 +-1.2925293417409918 +-2.1516967112120033 +-2.680941401178761 +-2.3601598233024985 +-3.0509998251753814 +-2.2422958653186487 +-1.3245273844930014 +-1.4879113690730903 +-1.2968544478245587 +-2.287296071859852 +-1.3115629852681752 +-1.265832216946416 +-1.2161170779109742 +-0.3634333993442911 +-0.5469643911661081 +0.3000074733474237 +0.22351486446349678 +0.10907162412158555 +0.10907162412158555 +-0.07018647364337793 +-0.010541993076274236 +0.18382072126347992 +0.5410370751581097 +-0.2207610893597698 +-1.0862101743474506 +-1.7819993481182057 +-0.9470660384684217 +0.0025735501713397557 +0.3599179174039513 +-0.030477100475763685 +0.14958980281562828 +-0.37968260711244983 +-0.26759584886235277 +0.22683967928483917 +0.57625329122909 +0.57625329122909 +1.0607745327317892 +1.184307281342475 +1.0052367127647726 +0.8938540359439414 +0.038755017204861075 +-0.37956905505491045 +-1.2586119645664282 +-1.4548588021281699 +-2.1710300575559454 +-1.2824093783931516 +-0.6608191069725624 +-1.015276842860851 +-0.46098121050259855 +0.1673009413055 +-0.5271270365681828 +-0.6481168361772848 +-1.1075296485161263 +-0.9225357616550198 +-0.5748058101339892 +-0.6168029757135495 +-1.476949047944483 +-1.2987825473751975 +-0.5672351281365506 +-1.5015222600772786 +-1.1646437905083067 +-1.219512093432261 +-0.38209118869099457 +-0.38209118869099457 +-0.4337288784373806 +0.2094638732327797 +1.1521711389098042 +0.42677001877908927 +-0.4548825179318001 +-1.3167422069585795 +-1.2658816971344578 +-1.3341656186770843 +-0.7405419646409412 +-0.7405419646409412 +-0.19321929767453416 +-0.03498327343347052 +0.15868465082990224 +0.28484034718792595 +1.2626796108674028 +1.676328076499741 +2.4701692971407345 +2.4701692971407345 +2.0505896065252176 +1.4790209190128858 +1.8816902833972082 +2.1681368091185282 +1.725056027537264 +2.2034589220724228 +2.210081877058243 +3.1431122470571067 +2.1948403597195707 +2.5095342001599352 +2.257727013247711 +3.2267401034860814 +4.201886063168222 +4.64929644341587 +4.822329101478145 +4.822329101478145 +4.157012009585959 +4.184034665743503 +4.253684696079549 +4.9386115623264875 +4.9386115623264875 +4.495796092667748 +5.188324591228848 +5.09341380578034 +4.756490770479385 +5.287189373295657 +4.4183616314144665 +5.17573953657174 +5.880700640998264 +5.45780268427789 +4.776174518408128 +4.776174518408128 +3.82878574055087 +4.827702237094541 +3.8976691625075244 +3.0576182908145384 +3.8266354074710804 +2.8290228669176605 +2.428994372153379 +3.0543513718620465 +2.9028567463128616 +2.6448922160362223 +2.5017941714150074 +2.061990307918722 +1.534612456486013 +1.9231658365017437 +2.6261323943869153 +2.906100534667155 +3.6068657885051554 +2.77491801297938 +2.0757187383710427 +2.0703583801889636 +1.5417450918428122 +1.0740664623919445 +0.4901030822487924 +-0.3173559580143104 +-0.26202251829213385 +0.03110278674021738 +0.6479370030084315 +0.8287110027161277 +0.5087922402471946 +-0.19613259147702122 +0.7706912515373793 +0.7499287719190362 +1.503636668481762 +1.971730339303285 +2.0100152541868948 +2.650294779485722 +2.4489898241651957 +2.013025306819668 +2.6069742785176553 +2.6069742785176553 +3.276008773810487 +3.5120799046865523 +3.936049205817095 +4.397870262283687 +3.781720659575033 +3.781720659575033 +4.577755916216956 +4.237021976375843 +5.1788791243945855 +5.928177643573405 +5.928177643573405 +6.724256384693562 +6.724256384693562 +6.724256384693562 +6.661067472593308 +6.661067472593308 +5.749263271244196 +5.1867606222536 +5.895998950263276 +5.198101178825997 +5.613410232896674 +5.720388184819317 +5.892130052366102 +6.804454141727595 +7.540003334544088 +6.550893393320285 +6.100128696547632 +6.505927525417656 +6.418647598389035 +5.958041485455901 +5.5321669229111805 +4.6699230879831415 +3.7682317412669164 +3.682745617567218 +4.1372241527599956 +3.429648718479939 +2.74208085703544 +3.3226805945744124 +3.114958691050454 +2.260118618166601 +1.3622620280686928 +1.3622620280686928 +1.1134287357767616 +0.2719265983358914 +-0.6166743834384656 +0.04742419795738928 +0.6517387925024891 +1.5470565586014944 +2.533137115072871 +3.2565324987008433 +2.4277395334902385 +3.278176433252197 +2.2875403545559294 +2.5820853856818022 +1.672789625092447 +1.672789625092447 +0.7017308664465927 +1.101516897505179 +1.082118569019245 +1.9942777150037245 +1.431319475897124 +1.8813230742780385 +2.217544642311177 +1.824412316802039 +1.824412316802039 +1.824412316802039 +2.18539720777837 +2.1617555801512047 +2.9260115894267957 +3.5315484991519863 +3.5315484991519863 +2.7297631169567493 +2.4137198563063196 +2.3257495358137503 +2.2757315219069643 +2.2572292662424016 +3.0741666694363103 +3.9170038795087163 +3.858586406275928 +4.274863695686331 +4.43656381145315 +3.6335738210300152 +4.236773145764975 +4.020007772951085 +3.57693665146635 +3.57693665146635 +4.504720683398892 +4.618870965982772 +3.8386606655221334 +4.089975152668295 +3.5780978437822837 +4.189088844900417 +3.6832523754100306 +4.303557058910564 +3.639422553209792 +2.89010024389796 +2.2878338534966405 +1.6311455040196219 +1.8093049277827342 +2.3688927113050324 +2.760604935462104 +3.707182971649665 +4.595598303101758 +4.875162676336467 +4.86595186357232 +4.86595186357232 +4.539277841597141 +4.070859819956902 +3.647488633704019 +2.954001149642115 +2.2470947622696875 +1.5296826750439323 +1.909406330342015 +1.0139071924486724 +0.7814712858180418 +0.4054252494229693 +0.9058790170703157 +0.9058790170703157 +1.4349488927009346 +1.3531792469709938 +0.8439820871541877 +0.0945308739344386 +0.8132008636492272 +-0.15547412090563317 +-0.28073402053336716 +0.12605609939465368 +-0.6165808310674715 +-0.18308540188483147 +-0.9201185641224779 +-0.6503668071784104 +0.008669499267829894 +-0.7459796964474951 +-1.219969609466275 +-0.22730416331773085 +0.029059505484500425 +-0.0830023052862704 +0.37824595919739357 +0.8462010335698257 +1.5481438411452628 +0.9582494359562075 +0.6719686883002677 +0.9544093076550649 +1.0741910333270233 +0.9523424644364175 +1.251125607252186 +1.0533764129341714 +1.0533764129341714 +1.6675671599398343 +2.4461450534506555 +2.5552350450651806 +2.658678503301483 +1.6611713265497967 +2.5382848142715355 +2.5693464600248723 +3.083760299822104 +2.6454561830796117 +2.825196438942685 +2.375849351328218 +2.7757268230619947 +3.0689619679812052 +3.784878178570711 +3.8841564808626687 +3.4467867531906666 +2.8487241786494675 +3.4027302216745143 +4.108332255465619 +4.43711291995727 +4.253480343304407 +4.612311288515093 +5.4494260763708935 +5.216364147756166 +5.135391777320945 +4.306754615115905 +3.3863491062102073 +4.25618485757277 +3.7274635246758914 +3.2790250139910775 +3.8441477963026416 +3.662400381844773 +3.797566293908679 +4.75420480114824 +4.565093615885473 +4.539269390959875 +3.651381543304584 +4.364446231618235 +3.9105960180568937 +3.9105960180568937 +3.6205558635635926 +4.580491601794768 +4.231367656081085 +4.231367656081085 +3.254805157828785 +3.1910012122516256 +2.457098982268957 +1.8523091227725847 +1.6944456657437388 +1.2634241615556259 +1.9824939256276792 +1.1101432795961648 +1.5955678498596806 +2.0693981562177304 +1.1570679960948815 +1.8767798937355384 +1.8767798937355384 +1.6372730139050158 +1.7183233144950676 +2.7096051254967373 +2.292908256650663 +2.505300025302304 +2.514915865189985 +2.682981288008511 +1.930348566827343 +2.5822827393709966 +1.6236586528601977 +2.051604684383975 +1.929643374644689 +1.980784332542421 +1.852336384826093 +1.3766210654519826 +2.002451633563834 +2.097783709435225 +2.936508560568716 +2.5584265413553196 +2.64929456650871 +2.0746966609418265 +2.3813210566364273 +2.0779022346343123 +1.7785868452550164 +1.4998503222265587 +0.790772115408227 +-0.060504944579519604 +0.2895818629978808 +-0.5025225942510665 +-0.8654386381482252 +-1.1063384788363295 +-1.1532232052136382 +-1.371986999520268 +-1.2275288754161393 +-0.6417371801760223 +0.2321433596070741 +0.2802222654464477 +-0.04290435842816598 +0.47369123055010587 +-0.11763722428465051 +-1.1124811441273108 +-1.1124811441273108 +-0.7790000969121207 +-0.9658432103920892 +-1.4135147516010371 +-1.8839909815582736 +-2.37629325968212 +-3.2912571144456924 +-3.566543475703683 +-3.9310050813150923 +-3.9616536689404747 +-4.45587309772792 +-4.72650898729006 +-3.8574551730046553 +-3.9444291742418454 +-3.699405162172924 +-3.699405162172924 +-4.501563382871755 +-4.334248727176231 +-4.298472945794348 +-3.664378717538008 +-3.2545391584068097 +-2.81884026216537 +-3.2147820008082797 +-4.0864584621351225 +-3.469204827021194 +-3.7407884306520955 +-3.900374770457319 +-3.000468920544142 +-2.7008228872072633 +-2.5801857651564246 +-2.2708697116811765 +-2.2344193822427307 +-1.6358976411497719 +-1.5364193244191788 +-2.192400032373902 +-2.463379025547832 +-2.463379025547832 +-1.9784156033046592 +-2.151284099351061 +-2.744804009228665 +-1.946380318034668 +-1.3670365643513547 +-0.47209859342547245 +-0.47209859342547245 +-0.8333434938180536 +-1.805721522287088 +-1.4801953199443296 +-0.7617780450602367 +-0.08107382105352157 +0.5117015044969155 +0.11798804474043834 +0.3940110392642143 +-0.5905764475988241 +-1.5416443323825897 +-1.3617876261663273 +-1.3617876261663273 +-1.8769334082991966 +-2.8263632772847087 +-1.9494741034467689 +-2.529134309300635 +-3.1745641709196954 +-3.642421036168471 +-3.8404037018695374 +-3.664736302497775 +-3.111223831733759 +-2.526418520565308 +-2.612223394384273 +-3.1553049133961464 +-3.3503159009413213 +-3.163652124214943 +-3.27455217317834 +-2.304744984593663 +-1.557611306076595 +-1.8454632656997698 +-1.6350620066369381 +-1.5686798297016804 +-0.9818770326110986 +-1.8410190126686357 +-1.0357788960568655 +-0.23416921764462018 +-0.9596340654026796 +-1.4992393407576956 +-2.4750306074640065 +-2.1798050261826343 +-2.859550675902355 +-1.9732156051143426 +-1.957543941104703 +-2.2813978956703256 +-1.9336446856293874 +-1.9336446856293874 +-2.3130844826344665 +-2.802143736105007 +-2.802143736105007 +-3.152328506856543 +-3.667706458917006 +-4.254310175068593 +-3.700216268687571 +-2.9033430850749555 +-3.534001652196846 +-4.313987760688443 +-3.764714337103208 +-2.9493775212164604 +-2.83690656545173 +-2.298045556842066 +-3.297941637012104 +-2.612546044569287 +-2.8048310445529947 +-1.9578631901136272 +-2.654279535645205 +-1.935420635789022 +-2.7308266530176533 +-3.537349749501832 +-3.862890189383486 +-3.491415165066547 +-3.491415165066547 +-3.551258086956659 +-3.686641859910195 +-3.9324094399391645 +-3.7988059292906877 +-3.8388686482784338 +-3.0690656877911295 +-2.0789894258169417 +-2.799074416741301 +-2.5851239862496227 +-3.389772352057917 +-2.8230243865737634 +-2.998073166610484 +-2.124864903302798 +-1.9319248642426512 +-2.166941981649437 +-2.6322225934560937 +-3.570019357588874 +-4.27384203636093 +-4.832964149051393 +-4.3628521128024955 +-4.7059632042228605 +-5.360532424977631 +-4.385271478975202 +-3.7356964790600897 +-3.261026875666377 +-2.614637913033672 +-3.5936067298390375 +-3.475783079407293 +-4.116112741696629 +-4.31775675907891 +-3.451969993859107 +-3.506985946209118 +-2.6765753314723932 +-3.661395795216386 +-4.609868831072285 +-4.609868831072285 +-5.467816725320028 +-5.467816725320028 +-5.726964232139287 +-4.974512061883834 +-4.974512061883834 +-4.1419101310262985 +-3.5585093080213963 +-4.134607773779384 +-4.360025035776877 +-4.083075390133411 +-3.754470268407504 +-3.5114054726894786 +-2.622904537299153 +-1.7826014390158909 +-1.434034641871025 +-1.5047782249465858 +-2.466001119083648 +-2.9298054904818596 +-3.513723440541315 +-3.4122338147193836 +-3.45652308654824 +-3.3571034540540063 +-2.8547191507339855 +-3.602017856807377 +-3.633820501548811 +-3.147582519763872 +-3.5673294839608922 +-2.789149794457499 +-3.16157456553347 +-3.16157456553347 +-2.749505460397665 +-2.4292230351250725 +-2.7519441105322944 +-2.3926589536570306 +-2.4422310978736874 +-3.2836346452197995 +-3.2107843981764104 +-2.997073593022249 +-3.52076632955717 +-4.417469487733797 +-3.729562015975621 +-3.829175264736195 +-3.0988649988341352 +-2.2317877714923706 +-2.8810131640683836 +-2.3139940402680788 +-1.5064649844330573 +-2.1295930049476475 +-2.4796521618138585 +-2.27503294028185 +-2.5144758026668335 +-3.2691527011866732 +-2.397240638829779 +-2.718792177683435 +-3.3420446793394034 +-4.016044570275195 +-4.839940184726896 +-5.760768382565821 +-6.63225579805631 +-6.104366241992407 +-5.260865244245072 +-5.260865244245072 +-5.260865244245072 +-4.579020531988919 +-5.308089122316996 +-5.056589976376799 +-5.7627156722898984 +-5.7627156722898984 +-5.25495903453334 +-5.246121309150624 +-4.791937832456684 +-4.791937832456684 +-4.236396296926362 +-3.9156353635130525 +-3.37123174218494 +-3.676943547520571 +-3.077514575571332 +-3.7144475317723904 +-2.9567209152453673 +-3.094839915790438 +-3.0945539842737633 +-2.4057941600422623 +-2.016100862166103 +-2.7590358514425386 +-1.9860449789218737 +-1.0010672813374293 +-0.8570777011908175 +-0.67711489481458 +-1.0805274208741298 +-1.6973094381368241 +-2.5103338533479147 +-3.333472450123905 +-2.3819933256839194 +-2.8426278292701435 +-2.589781088363144 +-1.6451590583313984 +-0.9796475333588222 +-1.738548483944167 +-2.248410273667268 +-2.5680092388631897 +-1.7795327085357568 +-1.7795327085357568 +-1.0401796891431352 +-0.48631436525056304 +-0.8806473096251896 +-1.742145443172396 +-1.397221724104553 +-1.397221724104553 +-0.9666868614329209 +-0.9666868614329209 +-1.6765885425550988 +-1.6765885425550988 +-0.9583331959222912 +-1.27802909760456 +-0.6873468248898347 +-1.1418387058423032 +-1.9308459968626681 +-1.7157952893337742 +-1.9053522133118905 +-0.9344414665766334 +-0.7919243444572572 +-0.2941185251560976 +0.18477824561587486 +-0.43352087771621917 +-1.1389886884998908 +-1.3992504403975876 +-0.6516897708359322 +-1.2943906922240977 +-1.777693161598144 +-1.2715901148435131 +-2.1414751563150034 +-1.938515142519427 +-2.2624358340991293 +-3.204920824812614 +-3.204920824812614 +-3.3696740178127684 +-3.0200789085024455 +-2.13719407079321 +-2.400125151818456 +-2.1892874314008957 +-1.4780636975550747 +-1.5673382495950068 +-1.9181231567009993 +-1.2748909803177366 +-0.49219391100868104 +0.241610717297029 +0.09979555458943545 +0.9155278815229165 +0.9668359075498604 +1.259141345319431 +0.7359588946386943 +-0.18269703853156716 +-0.43217451834791454 +-0.4787976825149016 +-0.16763615588641545 +0.31337813014481064 +1.3072066244488136 +0.744103053503431 +0.004782701514439047 +-0.4217290137873574 +0.5438649070217824 +1.0331171813217348 +1.5608602009403916 +1.4193048448910393 +1.362852900372979 +0.6134856698896758 +1.3321482120453685 +1.3321482120453685 +0.6802805871107898 +-0.21356850905346825 +-0.5914629474352325 +-1.3910601229614414 +-1.3910601229614414 +-0.955856174708579 +-1.6158893537696515 +-0.9140530723204312 +-0.08442343534850316 +0.40803949720456956 +0.4568898684847298 +0.4624589389715903 +-0.3150377823880808 +-0.2745595926655564 +0.35471578786781466 +-0.6024110398774709 +-0.6771905333489175 +-1.5435263693051264 +-1.6303416376708255 +-2.1354473916678196 +-2.103036235251963 +-1.3766030104085056 +-0.48183026215336167 +-0.22051620176069786 +0.6044159689821251 +-0.0869525193777494 +-0.19489208426048654 +0.5170575950066373 +1.0899246000289096 +1.0899246000289096 +1.472316036780193 +0.9331522021020233 +1.5453912338490647 +1.02902701217276 +0.886967113666482 +0.3193626770258714 +0.15737637399179882 +-0.14268182325462575 +0.547271807464392 +-0.24335399243497913 +-0.024074581653154348 +-0.9859187154268952 +-0.09911415508433696 +-0.8977060221680234 +-1.6466731964823729 +-1.1447091051235017 +-0.394006037947789 +-0.3929833515693162 +-0.38694738411227747 +-0.4446426527240698 +0.2771502758320984 +-0.2820944905169097 +-0.41951482001244256 +-0.9412567174241908 +-0.7069480492512323 +0.054052806088764616 +-0.5012363052984148 +-0.700967604958567 +-1.0108210010824796 +-1.926879024472566 +-2.6737357887746334 +-2.6737357887746334 +-3.5070883197912424 +-3.7088735912603417 +-3.717200852188138 +-2.963961253079729 +-3.6184993026029346 +-3.687995012024718 +-3.687995012024718 +-3.950511651207987 +-4.184251738018499 +-4.184251738018499 +-4.781696936667279 +-4.466555893563994 +-4.041932774455557 +-3.3689222086515054 +-3.091729905250295 +-2.813057169238644 +-3.624196674731351 +-3.530483072758379 +-3.126547277989939 +-2.315030318468745 +-2.315030318468745 +-2.1475534555045646 +-1.9702578505881845 +-0.9852499318551424 +-0.3578728548502865 +-0.911782487863148 +-1.106957422554827 +-0.8308091620365039 +-1.31558514426701 +-0.5603075413982268 +0.29141288577372637 +0.3386938415977234 +0.1997303444834987 +0.22352666019667666 +0.22491170682400397 +-0.6633530018739265 +0.0829198203111331 +-0.19150755638522599 +-0.6504445807132683 +-0.14603417289788723 +0.3797839850408601 +1.1910290900011162 +1.8270417987551575 +0.8366896689737566 +0.03206563102157012 +0.8079582023490088 +1.1824525951638574 +0.2763762427270635 +-0.24650186918858186 +0.5665280284890775 +-0.2283398715883871 +-0.2283398715883871 +0.2634652704641589 +0.4258067923635953 +-0.24045910618485977 +-0.8706214239614825 +-0.5007344965456477 +0.1600632933762547 +0.08433938095667559 +0.08433938095667559 +-0.2264866740142304 +0.36458726833733146 +-0.31996804026362313 +0.5785135559475763 +0.5311920528158832 +1.3932231300406044 +1.5313337516192418 +1.0865612621893912 +0.33324785475231744 +-0.09783107525784607 +-0.5126329866564321 +0.1644379763494639 +-0.3392735934245925 +-0.4796984674299677 +0.1782382552074554 +0.9957210254257679 +1.4897287549902996 +0.7487504508051697 +0.7487504508051697 +0.49883322746537917 +1.041782846570984 +0.993756246431918 +1.4910881046307778 +1.0890724637886704 +1.919540264049614 +1.0245644840692982 +0.12932162591957952 +0.08016870214901106 +0.8087407385747728 +-0.1885438447411697 +-1.1221213572671647 +-0.9637965684118868 +-0.9507875694525274 +-1.2123334432771466 +-0.38825402378382123 +-1.3878354016188832 +-1.407453259212196 +-2.1455433239905073 +-2.067942504695412 +-2.467579925397491 +-3.2947518752131986 +-3.1013085345076425 +-2.734528172548222 +-2.393560159283303 +-1.6450854293926447 +-2.2259520714192034 +-1.4568443739038985 +-1.6424012148149871 +-1.153326797293591 +-0.7420720907858323 +-0.18612133077590753 +0.2665557149274451 +1.168040635220645 +2.047701124400475 +1.5013500015235757 +0.6987770046589801 +0.04689915571426284 +-0.30921664850448594 +-1.1957985180615087 +-0.8991135623439421 +-0.21867289128627831 +0.16376087265763029 +0.725245086041804 +1.3521227067102952 +0.765237061864452 +1.4693347484929775 +1.4693347484929775 +2.3323390635051107 +1.796749142721214 +1.796749142721214 +2.1092056770117757 +1.8237911604219752 +0.9922982628334835 +1.4713494714079223 +1.6119852817735183 +0.8981734912232298 +0.14481687939420262 +0.6190284029619941 +0.6035822819875963 +1.4387423677632718 +1.1704527237077693 +0.7082831946979656 +0.5062451395986423 +0.9460413191226162 +0.12151124178629913 +0.5418638660825694 +-0.31021009541562394 +0.4395636297947456 +0.0820232526900958 +-0.8723328579314481 +-1.465764350478452 +-0.6699586766003836 +-0.5903600750827884 +-0.8649583259506347 +-1.1884958166805004 +-1.9940555626569705 +-2.261029106440322 +-2.1402164039998626 +-2.2393951315185077 +-1.9218850604899194 +-2.0333975518616723 +-2.483295202909025 +-2.7260761186718163 +-1.9844440431315793 +-2.3236924736123807 +-2.101381539005608 +-1.303963069305521 +-1.303963069305521 +-1.9744109229221127 +-1.2846882305452305 +-0.5563950228440002 +-1.1124865454549662 +-0.5942393885176318 +-1.5602104326181006 +-2.42982172116705 +-1.632757368208932 +-1.965395069338582 +-1.965395069338582 +-1.9315399427602158 +-2.0014423950346423 +-2.1386802640629234 +-2.941373169667732 +-3.543026872651791 +-4.163939693208426 +-3.2455456445810116 +-2.8671979729884685 +-2.958207202487637 +-2.53240497366414 +-2.53240497366414 +-2.761396633065195 +-3.2136175177020436 +-3.101903739332765 +-3.778071972167138 +-4.434379431968855 +-4.233361527035899 +-5.042044146020428 +-4.17921676983196 +-5.012776803934965 +-5.012776803934965 +-5.490888785376956 +-4.77465481560365 +-3.956206999212634 +-3.315828434087492 +-2.9095938449941796 +-2.5919632393934293 +-2.285818258776212 +-1.8484013447319714 +-1.7432665157662426 +-2.0211793451821074 +-1.891315876626716 +-2.1390378709120457 +-2.7003320499744383 +-2.753173261917179 +-2.419004586591038 +-3.098146398127618 +-2.4631991747417503 +-3.4245388108818027 +-3.1326625233120184 +-2.7251991227994914 +-3.441257785842459 +-4.057380279402365 +-3.5949421521491898 +-4.411612720668215 +-4.411612720668215 +-4.148693426246239 +-4.78971417956264 +-4.78971417956264 +-4.025304642911011 +-3.9723580755828767 +-3.3106464029011358 +-3.607918790848564 +-4.131419112902571 +-5.0310059383812495 +-4.101164493805957 +-3.9720700904566097 +-3.8219393560888544 +-3.7973608770727525 +-3.4861940422821207 +-2.5000792629254347 +-2.058960937825624 +-2.8041388591906626 +-2.1081158963276723 +-1.9230250438260459 +-1.1610977180259763 +-1.2680475296842002 +-1.1767461660264997 +-1.8980193241858943 +-1.6416606156736764 +-2.071195257267163 +-1.986631677046601 +-2.0996447986187796 +-2.6671727014532203 +-2.440805535897546 +-1.8615294143039105 +-1.3015455337651989 +-1.820127732031947 +-1.6964737020405631 +-1.6964737020405631 +-2.031611943748111 +-1.648697136165938 +-0.9042180369892467 +-0.9042180369892467 +-0.3712147588338861 +-0.5661988211766878 +-1.3712036879408118 +-2.0491427710952923 +-1.1467657678324823 +-1.296677678466685 +-1.139097387763359 +-0.6488297084858532 +-1.0138337933259716 +-0.593236856708536 +-0.46448243640308196 +0.49381731931004413 +0.5485338189251829 +0.48868070070464864 +1.4280135560210971 +2.096336958137945 +2.0620099951315822 +2.0620099951315822 +1.2949492596895906 +1.4271950882486706 +2.243999660306675 +2.349070075838976 +1.5596423051568153 +1.5796215801637066 +1.5890752316680739 +1.583791440108953 +0.8683375142881833 +0.6067469488662492 +0.839417296540442 +1.8119268965912392 +1.8119268965912392 +2.7944023646313547 +2.351168031084575 +1.4645292464022173 +0.6184018718011457 +0.04121567869398213 +0.947690874563756 +0.5288488997961885 +0.8146179931092498 +0.6666029902453958 +0.2982136516116073 +0.006173640736826469 +0.16207310707359435 +-0.5885650544069005 +-0.8161553030521856 +0.1194817879292912 +-0.856892475316733 +-0.8967304538967378 +-1.363639633554342 +-0.980067399744375 +-0.17780920490562346 +0.6154631686433407 +1.4647043166233733 +2.4070890872314896 +2.142118382470546 +2.142118382470546 +2.142118382470546 +1.9473315055677163 +1.9473315055677163 +1.3366705209612726 +2.1702622601865986 +2.1702622601865986 +2.1785133034245043 +2.803520066004574 +3.2091526539409836 +2.7622541457318417 +2.575876656005898 +3.1426539395808977 +3.653411264688372 +3.866519515555285 +3.8697511140558905 +4.143145297403784 +4.143145297403784 +4.143145297403784 +3.190402353128235 +3.1381971464520184 +2.248207798801361 +2.701048224452097 +3.686465440694356 +3.994604644104321 +4.882870468925436 +5.290947874135693 +5.795783775266781 +5.5205342387921945 +5.5205342387921945 +5.044292960653732 +5.9866465154157975 +5.854218772404559 +5.665915291864039 +5.665915291864039 +6.483195656961116 +5.993842208458837 +5.398199443676072 +4.758329065402008 +4.758329065402008 +3.951384169242128 +4.370873598451771 +3.9759105637667225 +3.2270008137992665 +4.10599536713949 +4.115885850038113 +4.932200268145097 +4.143345790907591 +3.779695051990555 +3.6217828839489608 +4.400549840961736 +3.847376492755756 +3.444764071197261 +3.9030394383881264 +3.032218742330116 +2.4845742833002733 +2.7948547649866935 +2.3021264422945764 +2.3593613369223707 +2.0884176732716835 +1.5804892576337466 +1.9600393732243289 +2.420690327489693 +2.178236966930895 +2.8574157819733523 +2.7633779771995464 +2.2298724428624306 +1.512996978759152 +2.113716383416538 +1.5087309729967668 +2.1832295155672616 +2.015715972420485 +1.126258806275674 +1.5484924127896122 +0.8361656031481834 +0.19585080749032446 +-0.22295072497309099 +0.6449752861193027 +1.008204572182466 +1.5208743854628033 +0.7173326317719781 +1.0692411141032234 +1.1230926498209624 +1.5686668461055264 +2.044701839406921 +2.9201817159391044 +2.6558018495439635 +3.5132720962933743 +4.158928694946527 +3.365293553273608 +4.066662647742327 +3.4334117550068797 +2.5196170502428696 +2.7792596481624834 +3.3829360572960474 +2.4305744744061446 +2.5498171660067914 +3.368480705631451 +2.721838450464835 +2.721838450464835 +2.0149074997807603 +2.9479880419922733 +2.992089029045175 +3.3245535674679205 +4.091467575233436 +3.8647008940860053 +3.6653202028788465 +3.6258268116031322 +3.8934163025032125 +3.1206049435483205 +3.516829640809419 +3.7522968411477358 +3.812653485194269 +4.312688981515152 +4.41740492917124 +4.451324388787522 +4.439704739517051 +4.225393254624835 +4.652104679987628 +5.2532690591976685 +5.858089930993173 +5.858089930993173 +5.391851945627439 +5.3746058164641894 +4.712072735690425 +5.405606710298929 +5.405606710298929 +5.767205343765763 +4.889801634254364 +5.311276673984816 +4.697182688128705 +5.637275122423178 +4.745465447647421 +4.603453678821718 +4.089269958091466 +3.128762870452257 +2.5757025300659127 +3.035165688519868 +3.035165688519868 +3.887252971586615 +3.597668561214651 +4.042118523800288 +4.082884170684506 +4.032544150864233 +3.1406163437735897 +3.8726672108649294 +4.353713945505394 +4.324762680534787 +5.2390451865432475 +5.2390451865432475 +5.2390451865432475 +4.87306413500846 +4.87306413500846 +3.9508149867556854 +3.7320567755000345 +2.888299832830822 +3.169611985848499 +2.5515422204755502 +3.2932941210896765 +4.280685152313315 +4.205218275284459 +5.033262867862052 +4.387683158201825 +4.470706390986057 +4.646261845656833 +4.254509490736265 +3.803629204519989 +2.8195672344806253 +2.719992228977593 +2.481610374939092 +2.481610374939092 +1.6374569272718191 +1.2621301506719993 +0.6640250046605725 +0.6640250046605725 +1.3498378629501793 +0.8441351664154249 +1.496113400626898 +1.5507577246504682 +0.9640238429730452 +1.2614976915015306 +1.567324503283287 +2.3285185898734975 +2.243188346219414 +2.291052072499976 +1.5439165719417955 +2.1363726037841118 +1.2038674413570636 +1.4020899355548575 +2.1592629969293133 +1.954308852069666 +1.7956532065020854 +2.4813447939716005 +2.9139968846470308 +2.400029486248213 +2.5976286442708396 +2.2566938144693496 +2.9669665336858624 +3.272435178966203 +3.272435178966203 +2.502757649577916 +2.483463670183635 +1.772369439685402 +0.8668167524751604 +1.6889459646897924 +1.0636896321178557 +1.0636896321178557 +0.399929343131731 +-0.2847261065386406 +0.613392158439177 +0.25415160390646363 +0.9823333449263169 +0.4623943921152106 +1.081862841729674 +2.0149155857828758 +2.0323250446952166 +1.5577761743073588 +1.7892862784818375 +1.7057886030634584 +1.123465608033398 +1.142095956591222 +0.4531667102702108 +-0.14833273276548087 +-1.1134101029656378 +-1.3011332972322531 +-1.3418633178777548 +-1.7868511687488238 +-1.7082986557245115 +-2.483584575047227 +-2.212080858961544 +-3.2108082187875526 +-3.1832754399003527 +-3.0494938621485144 +-3.020293382361375 +-3.655010264203315 +-3.853109207958702 +-3.0324341409942352 +-3.850655460618328 +-3.090304084179144 +-3.991244005037486 +-3.9582116360763386 +-3.2392349061927352 +-3.34030193480295 +-3.391533747282625 +-3.8661851394521976 +-3.3632770048677507 +-3.209177844819707 +-3.5299271987478322 +-2.5683768215539633 +-3.1805939300261503 +-3.725773217260949 +-4.050207150096663 +-4.296917568752497 +-5.157392414881034 +-4.458069349945588 +-3.513417673873673 +-3.513417673873673 +-2.5986498042038506 +-3.423901412715141 +-3.121223852501518 +-3.5580915620258926 +-3.9142734671732624 +-4.368192902997543 +-4.368192902997543 +-4.542815080013111 +-4.352040477228267 +-4.976367706013696 +-5.734981336176969 +-5.2940511426403765 +-5.056675923237178 +-4.665883527010894 +-5.3710044843687275 +-5.101230496940517 +-4.549484116716068 +-4.9482607990470004 +-5.760426961323929 +-5.024909464999856 +-5.794304629165527 +-6.655007413412815 +-7.384609946651434 +-6.842649079254759 +-7.824080057726795 +-7.8448408164716215 +-7.358138406219807 +-6.852782071944817 +-6.43515261377938 +-6.29023981921605 +-5.8412672373908645 +-5.77885464084409 +-5.205927698365334 +-5.205927698365334 +-5.095058082320747 +-4.626630713032023 +-4.626630713032023 +-3.819439895907772 +-4.194956434760189 +-3.9415512295163486 +-3.9415512295163486 +-3.787479990212979 +-3.9999591211061962 +-3.4280264638968436 +-3.288889144122795 +-2.605803968624259 +-2.122027039674177 +-2.4915843630062118 +-1.5613304360574003 +-1.746578021896902 +-2.4536976298517787 +-1.8784806042808828 +-1.8784806042808828 +-1.727221545616709 +-1.3438361494744113 +-1.0779370056937372 +-1.9807381638556434 +-2.3976624326430422 +-1.688905815829053 +-1.152551288022431 +-0.3798811467108927 +-0.27413753488387593 +-0.14917218976558377 +-1.105847270303902 +-1.105847270303902 +-1.0512994114570207 +-1.2403741232535226 +-0.3879047492594565 +0.4680402276118967 +-0.337078346750012 +-0.1566030116766033 +-0.4873299411280031 +-0.3705286467264942 +-0.5440206281632829 +-1.3943127779266744 +-0.797366697380415 +-0.8204201017302232 +-1.1520661575548552 +-1.3265237686578883 +-0.40046802901656875 +0.35342849761599227 +1.2737179008939281 +1.250263606589527 +0.8351845326339055 +0.5616601002955603 +0.5616601002955603 +0.2716711151948218 +-0.24308876365995602 +-0.059958368320487065 +-0.5813749612744387 +-0.9435546196656404 +-1.7997424400699318 +-1.7997424400699318 +-1.905548899557239 +-1.380546267872325 +-1.618059036169091 +-0.8466778220895321 +-1.8089503359745296 +-2.0339288945883487 +-1.640355211479789 +-2.131819373158913 +-1.2786112517384218 +-1.3327086320174861 +-1.2225129908680723 +-1.0862757593579768 +-0.18365034164730742 +0.48671252958129574 +0.7521358524155621 +0.050316871391646645 +-0.8747149210554999 +-0.9096493232655117 +-0.6410442369222719 +0.12840068666467885 +-0.0010139575403742551 +-0.11916797058112583 +0.7029865291528118 +0.9750870190277655 +1.0136617340386405 +1.41533274219125 +0.6797005681530277 +0.47590348168828756 +-0.23362162114137164 +-0.5670878456483455 +0.2622890788079424 +1.2355343837003765 +1.6664905222821755 +1.665691847003333 +1.829731351572925 +2.1408736830030333 +1.8808497683407182 +1.3309052914413328 +1.3673805032816226 +1.5905895214732721 +0.625269676054341 +0.6401750721237132 +0.11682862543178851 +0.7098223447092167 +0.7058991824229016 +1.1440074581059756 +1.1440074581059756 +0.994616961023791 +0.9491007938677816 +0.9057581343170261 +0.1237215668916195 +0.19187644598478426 +0.030919145142160875 +-0.5403856910435747 +-0.2311891393427703 +-1.0499641546448268 +-0.08285477148820464 +0.004423112443123545 +-0.9681673746363855 +-0.5554280492801418 +-0.38034841268308206 +0.5991809243651962 +-0.33371548098256376 +0.5689383940340376 +0.8417872974530136 +1.349304608445265 +2.268555088836374 +1.8110111715908226 +1.8110111715908226 +1.635821354350889 +0.8215361417914746 +-0.1276925124425139 +-0.37445142435321654 +0.5269068418218389 +0.2927569993408592 +-0.277175934586108 +-1.2729232367037986 +-1.8409539387542586 +-2.0128351090014536 +-2.8727838753273227 +-2.7253374380008526 +-2.8274889226731257 +-2.171427908970338 +-1.412957576847536 +-1.4861941505550966 +-0.6901477922337653 +-1.3980269188189862 +-1.7148121827144465 +-1.5576016026905146 +-0.8673475557485344 +-1.0207654293088662 +-1.9874214070977283 +-2.045868297867182 +-2.479274367141417 +-1.8970627721655788 +-2.433233208797164 +-1.8130402036522137 +-1.7259774274403463 +-0.7987967923192405 +-1.2137073961698666 +-0.825677470232937 +-0.4523308475834822 +-0.06437670049936339 +-0.39166191180792065 +0.08923041384902752 +-0.08567448264199706 +-0.3509037853088245 +-0.025124403922123117 +0.24611795035153705 +1.1255457347173543 +0.8437262961196675 +0.04966300323454009 +-0.16943342192931143 +0.0594117690908067 +-0.5463343193941395 +0.29407020570473064 +0.932677686754767 +0.9366706237777371 +0.8505495302316365 +0.3001808668787883 +0.9236127259437034 +1.363036113056717 +1.4055472089551804 +1.2920552303728936 +1.4076414721129147 +0.592794304785365 +0.5021033132617022 +1.220242917835674 +0.30029526684800545 +0.5089551397745082 +-0.05330556581597179 +-0.7390122192245852 +-1.4476688288661046 +-1.4764880511211187 +-1.0775292189823258 +-1.2963414096236274 +-1.3616713648681147 +-1.1212711722768651 +-1.6044628195002257 +-1.425525975537095 +-1.4067705493972544 +-1.3013590113068119 +-0.4162156743213534 +-0.4162156743213534 +-0.18459242636827788 +0.8043593933767579 +1.0403115954930617 +1.6769538666642034 +1.4794123923511315 +1.1005270311763078 +1.9445735042923915 +1.5648985117362715 +1.4814127650874713 +2.0120689027009266 +2.8971675087148228 +2.5633402037559305 +2.026103662221641 +1.343353293489734 +1.8312007106134334 +2.427160803056292 +1.8643916527863535 +1.3423716157581516 +0.7980191421337064 +0.3107426397430445 +-0.37225957961664424 +0.5159798243719055 +1.1985490857131347 +0.5271373360770755 +0.19770261011532952 +1.1444592066318888 +0.4563747335698818 +0.07741492495138125 +-0.6201769924001711 +0.03635033975629287 +0.2336172125839765 +0.4198333841021217 +1.240376650821223 +1.9504242175711357 +2.478410402204786 +2.478410402204786 +1.8548301608163258 +1.8548301608163258 +1.8332531679952502 +2.259788542436681 +3.0871903631260706 +3.5233475342684266 +3.691422957720329 +3.691422957720329 +3.4957579984064986 +2.9376212835001203 +3.356561282955612 +4.051278840983602 +4.480388403803813 +5.261178695063347 +5.0784830201591245 +5.757694045910959 +5.770029688969362 +5.770029688969362 +5.531621257378815 +5.531621257378815 +5.446627975147087 +5.525244288793384 +5.115126112229266 +4.218441358449626 +3.518051265442688 +3.9172901000220586 +4.451846568928081 +4.012083916358345 +3.124914442029858 +3.5893823574301953 +4.169718942766409 +3.9881130918244616 +3.137688727694589 +3.2893152958051766 +2.7986974132642346 +2.7986974132642346 +2.3208168605543795 +2.2900722369358735 +2.4036834088188694 +2.437355179911581 +1.5625195136442875 +1.1856190590518332 +1.564697962045208 +1.0014748107122522 +1.8844798033670767 +1.797715023104899 +2.195507067704364 +1.899189273892378 +1.8794456893604794 +2.010295410333228 +2.347148238110206 +2.1974655117840234 +3.031674198693205 +3.0331863727899355 +3.66154196608095 +3.653608037403801 +2.821257691230954 +2.477177663580593 +1.7988225553913597 +1.643804956321329 +1.929953585617629 +2.5903154222240765 +3.103263659405102 +2.194154876501098 +1.70004533409407 +1.7707174685090277 +0.9871934948871097 +0.9871934948871097 +0.14671176265488572 +-0.4177146751609022 +-0.7025882948228129 +-0.6277158921689031 +0.036765868295192905 +-0.37388211279524475 +0.2813413054880649 +-0.05148376828346535 +-0.3508809670708162 +-0.49494187952452073 +0.23296015802915926 +0.24204307100468248 +0.7686154866730989 +1.5420490604204238 +1.3644962121483784 +0.36791801109761213 +0.9722327097358885 +0.31028770792387395 +0.34409557476708064 +-0.16624255101290308 +-0.0931243758627367 +0.08286703566524478 +-0.4623304997950346 +-1.4092330725775326 +-1.5754587146518362 +-2.445109444870047 +-1.9306610130463973 +-2.140854997413302 +-3.115298955975818 +-2.9692214066411005 +-3.2173249204681356 +-3.272199653248585 +-2.811676934630401 +-2.793953608756653 +-3.580082459760633 +-2.6859746469414807 +-2.6630515627197946 +-2.6365245647462006 +-3.0251933087005325 +-3.428243801508089 +-3.428243801508089 +-2.8051475764279123 +-2.4747226325700264 +-2.075607057909558 +-1.0787631223848948 +-0.30594533294935067 +-0.7803827508336504 +-1.058131589048645 +-1.5699865326843794 +-1.2291776061910895 +-0.45946538043622054 +-0.48912100529122726 +-0.3136370260844342 +-0.5194749370625127 +-0.6938092643001342 +-1.6496871297770261 +-1.2996754151055394 +-2.055167629185534 +-1.5877208857183918 +-0.6686528762892934 +-1.6122908500071544 +-1.7440935710040564 +-1.0299519604862266 +-1.9446251518381057 +-1.4010700135041323 +-1.0884194862749823 +-1.833236462459818 +-1.2553638089664754 +-0.3680727961889574 +-0.9326918790435865 +-1.7548870233001699 +-2.191674871362983 +-3.153099403461529 +-3.944288061745026 +-3.944288061745026 +-3.3209042535676443 +-3.814695104922317 +-3.6688700451014444 +-4.088248346215988 +-4.067885204671814 +-4.696371860632929 +-4.086376809408227 +-3.707629336766387 +-2.867328495967117 +-2.221275946462546 +-2.221275946462546 +-1.2442351643105778 +-1.8089352600212103 +-1.2353755838893077 +-0.2980946732054959 +-0.8147755442095175 +-0.15235048810695995 +-0.19314963100848537 +0.5791515400114279 +-0.33430982563190625 +0.1915670835710278 +1.155733332381776 +0.6623629089353767 +0.3702956965264945 +0.1827726808123108 +0.1884380496100292 +-0.619946374330479 +-0.09473279110406241 +-0.5673053367412833 +-0.9805505648760796 +-0.6209036217484322 +-1.1403854623071408 +-0.33875489737319064 +-0.7132209512513558 +-0.8160662685365159 +-1.712027982168276 +-1.4939786093990897 +-1.1366469440435456 +-1.0211136958013904 +-1.6417296662161962 +-0.9041069806376065 +0.047846774191480534 +-0.7885188630360784 +-1.0263651601125194 +-1.0263651601125194 +-1.7840851148260497 +-2.2586321520311263 +-2.0610320147570347 +-2.3201003866903473 +-2.641583963276203 +-2.5971453112592577 +-2.5971453112592577 +-2.5971453112592577 +-2.7900252367689595 +-2.536789756599866 +-3.2424209240209145 +-2.463279366328405 +-2.1768014700203597 +-1.3952969873144405 +-2.115901795232771 +-1.4281394253846054 +-2.0261415009966552 +-1.1531783477043782 +-0.3364079608300645 +0.3156520923231969 +0.46487023885520995 +1.3797820353827754 +2.2072108829596706 +2.4227733742099495 +2.623785827938065 +2.058237631770397 +2.069797497152051 +2.5500911184981248 +2.0028205347224803 +1.9076898725827869 +2.15902536936494 +2.472975432890904 +3.069247350775216 +3.3265252036966877 +3.507638161117739 +3.1433290368189803 +3.405671437582111 +3.6161370218669866 +3.0953280306714044 +3.0121020990992413 +3.5643833104719276 +3.5643833104719276 +4.364185939172811 +5.00920054872131 +5.611402721902371 +5.864238809462938 +5.584052759770723 +5.538549302002681 +5.797611225394378 +5.911838616576716 +5.243582759079747 +4.528943432468114 +4.689331917571646 +5.072896505689891 +4.87984712073846 +4.87984712073846 +4.912907659327672 +4.768480500149257 +4.4327041539260845 +4.993081457865148 +5.349850670363208 +5.248073424048349 +5.168370562681711 +5.289611560807981 +5.289611560807981 +6.133784305888744 +6.133784305888744 +5.682769272031024 +5.839868074374854 +5.839868074374854 +5.448102651651435 +4.95322548202953 +5.766943710535941 +5.553056219249575 +4.748762484166465 +4.428291212670013 +4.428291212670013 +3.6510888470842 +3.6510888470842 +4.443994840105816 +5.246945820622027 +5.482868059258011 +4.675411291155108 +4.675411291155108 +4.567260348378211 +4.567260348378211 +4.567260348378211 +3.795201008078765 +3.8858297735957708 +4.689069562729272 +5.235353828984933 +5.3212197982935425 +4.555832049477213 +4.587672690920921 +4.587672690920921 +4.744656873837452 +4.744656873837452 +4.436185303627298 +4.436185303627298 +3.973488860883613 +3.555686744711629 +2.637944739552932 +2.6158103122219343 +1.9410194280900392 +1.8797754663939252 +0.907834279470157 +1.8200279046226069 +1.1960197880232093 +0.7889604729764216 +1.746488472701953 +1.0233183881006611 +1.6403319950433126 +1.6398725941678647 +0.8317348628570529 +0.3280676287949391 +0.9861388701276017 +1.9333903790681362 +1.766709545980489 +2.0224019145425816 +1.2838296475067006 +0.6584524417377831 +0.21434513194339877 +0.7094359383095837 +1.0417192255088534 +0.5820144403454345 +1.4797851419036872 +1.5490180880227036 +2.170211641337164 +1.639089695229628 +1.4744193856064087 +0.6848625311291512 +0.7019193490036044 +0.8859929946354039 +-0.01012350487567737 +0.415740639947487 +0.5202797339332541 +1.479910847057677 +1.9314506830483873 +1.0374282210207695 +1.4016710935822863 +1.1079084845022593 +1.1079084845022593 +0.6719705813768045 +-0.0012795770084376157 +-0.31647528815553483 +0.09180144258082823 +-0.6718636746810811 +-1.4930698546111225 +-0.8972014798866756 +-1.5733441671615316 +-1.5733441671615316 +-0.9651081239254453 +-1.2948674083753224 +-0.3610473781289194 +-0.8489944642712969 +-0.33211795299434044 +0.4734312057965343 +1.0495551349473398 +0.3583317267872457 +0.7740099245591268 +0.7740099245591268 +0.5672217991178891 +0.5672217991178891 +-0.021880369361223617 +-0.46258689604711845 +-0.46258689604711845 +-0.6659571989564751 +-0.8512161973050663 +-1.459614563266078 +-1.9538469921971808 +-2.388120130094466 +-3.1435718010298537 +-2.144477047149831 +-1.4210608162497047 +-1.0381741462104492 +-1.164817179301422 +-1.6620026261508802 +-0.7817283782755637 +0.06698197457015631 +-0.05375510198739486 +0.806216314487861 +1.756986515176874 +2.186282043799252 +3.005687846940044 +2.7102057747082164 +3.162612017923158 +3.5542185473274985 +2.792269826964076 +2.6888664246411618 +3.199383840617086 +3.6250782243698705 +3.6250782243698705 +3.5527624687844632 +4.524090290797792 +3.9283303659843005 +3.2994397863142906 +2.967448099347792 +2.019888453873345 +2.7745302332100787 +2.8468479272118232 +3.286211622942807 +4.13622372757415 +4.13622372757415 +4.584272314235067 +4.584272314235067 +4.584272314235067 +3.8433726069902914 +3.8433726069902914 +3.7626236450206796 +3.997255256027858 +3.668749341548329 +3.137352792590729 +3.284257361278585 +2.6851446588105574 +2.4949986013780645 +2.9012659549824016 +3.1312046985177697 +3.1986333154698388 +2.707557595389481 +1.8223131081798598 +1.8710911644720352 +2.8017933847219583 +3.3726232239134015 +2.3885373144546005 +2.4774973731443786 +2.3150529713360446 +2.346580940855576 +1.9590703090639425 +1.6290745771952326 +1.8185770712617135 +0.891388931829699 +0.06949884492993008 +-0.7519402096547074 +-1.3879423258378547 +-2.032911178918732 +-1.3048579394076947 +-1.3913929100170108 +-0.7578546118340197 +-0.3275928531558998 +-0.08644696458055856 +-0.3747408043367647 +-0.18774748816007392 +-1.1601409489128613 +-0.9635044701902036 +-0.3542338992598364 +-0.2786245936799956 +0.583790492300382 +0.23965893332879962 +-0.08517732170321723 +0.7413963893778277 +0.7666460631740311 +-0.07091556143350353 +-0.749921312310569 +-1.2458249560829824 +-1.0239904732367207 +-1.9252530197523274 +-2.3941745855554424 +-2.045601883154911 +-3.0361570295923315 +-3.4150928510653515 +-3.4150928510653515 +-3.350809573011164 +-3.350809573011164 +-4.287908898457646 +-3.458408722415742 +-2.5075923783333005 +-2.4490498651753674 +-2.4490498651753674 +-1.7248512345672729 +-1.7443034393942747 +-1.7941312650644075 +-2.1863810383893965 +-2.7696761111194093 +-2.7696761111194093 +-3.626926129886595 +-2.7873463699409866 +-3.7266253196789103 +-3.1695785632113207 +-3.1695785632113207 +-3.654644323520303 +-4.445901069344923 +-5.1568612161478535 +-6.0472199099979855 +-7.030723975973875 +-7.4415672473214025 +-7.282438733361914 +-7.066480514988576 +-7.066480514988576 +-7.124899387138272 +-6.562988386561271 +-6.210320806848307 +-6.023377296845935 +-6.881051621482795 +-7.470077060240741 +-6.748356647344667 +-7.452722359841125 +-8.312115843405254 +-8.312115843405254 +-7.329123626929908 +-7.229837284570175 +-6.600111283386585 +-6.600111283386585 +-5.963137603151699 +-5.098743502903546 +-4.500086768972919 +-3.966506203444533 +-4.174930641578176 +-4.496948546451517 +-4.496948546451517 +-4.149844753226036 +-4.149844753226036 +-3.2819015663503692 +-3.3838728499568775 +-2.634914926909378 +-2.212628723222589 +-2.212628723222589 +-2.4914723535235255 +-1.5857007960511984 +-1.7991346021988441 +-1.7991346021988441 +-2.4072288445667076 +-2.9236822297039877 +-3.6992448534762614 +-4.267476947895113 +-5.052925808247645 +-4.458820090081938 +-4.368556486760906 +-4.113653046357773 +-3.9669812751561873 +-4.599219972936352 +-4.367436061149519 +-4.539471010122035 +-3.888981326871879 +-3.6776842088969097 +-3.025828157634713 +-3.442253051521064 +-3.442253051521064 +-4.176912161061679 +-3.700249832158361 +-3.700249832158361 +-3.4500784762334056 +-3.8713559634032286 +-3.769407323969504 +-2.868576584707781 +-2.6467361570190424 +-2.749009135633094 +-2.5081340826911926 +-1.5867416678944763 +-0.6574029576208693 +-0.6645109300672084 +-0.8360519970284876 +-0.705807608973775 +-0.859713687149151 +-1.216800030776063 +-0.8276946836653132 +-0.6732114755275949 +-1.3050894773610298 +-0.3352703785191016 +0.6235555823550403 +1.2657877248593319 +1.5830704866585983 +1.6426093782519378 +1.5335454594249716 +0.9515316294148541 +0.647202306939063 +1.2018245426371812 +0.9410313140670657 +1.5813997922011227 +0.8678725390379876 +1.135156608358212 +1.0289430864312616 +0.6954398033903529 +0.6130505440417227 +0.4447466084138739 +0.06282871803321943 +0.6974210635945168 +-0.17893136305575585 +0.5632627317279839 +0.5933464257694618 +1.1595089112804773 +0.889399402948413 +0.889399402948413 +0.9049585014768989 +0.8103200025743298 +0.5893551007697057 +-0.17678592069600063 +0.3329762398305819 +1.0462042882554985 +0.24176743190303163 +0.8952303682246439 +0.4167552302481553 +-0.46618746605141437 +-0.3500180156040157 +0.019323413002655276 +-0.028683485275845966 +0.43035877981414083 +1.339849033982317 +0.9972625118684798 +0.7827650432886486 +0.22961312919166588 +0.07767949042491018 +-0.15229461603332517 +-0.15229461603332517 +-0.9907603135243339 +-0.69956183869632 +-0.42858484986435785 +-1.0556799458427042 +-1.6503326770462996 +-1.6291081731610095 +-1.2656259649048516 +-2.042643137991025 +-1.6402294107713307 +-1.5323364659026468 +-0.7041599064935411 +-1.1994841472945268 +-0.4193329022214931 +-0.7377129533582402 +-1.6857946670737074 +-2.1770972206230708 +-2.134015733474965 +-1.6645816530188204 +-2.5199195707167954 +-1.7129761708307827 +-1.8540083219979935 +-2.107292492885949 +-1.2999757417143147 +-1.9284215406520706 +-1.0538025861153957 +-0.7808289402080419 +0.048136525924695084 +0.048136525924695084 +0.6712010658434331 +0.2972547971396807 +0.5586985130649887 +-0.21637875426134723 +-0.9855105714923375 +-0.6531016707107015 +0.14255879172494212 +1.1389146213704961 +1.626778317361465 +1.303408305483301 +0.7773932933005192 +0.6923461166304737 +0.5820286771489047 +0.6334581037462645 +1.0793145126721735 +0.4735561020845689 +-0.025599005105848005 +-0.53961595888577 +0.1002357819379952 +0.09988626248887589 +-0.32864419104045905 +-0.027294677635398057 +-0.7957873950716462 +-0.0402921703933502 +-0.28928036143197744 +0.015371133497790401 +0.2523804228355899 +0.06069986015375328 +0.6234101573513317 +-0.22625732927575337 +0.0019284673183771472 +-0.5350272767890011 +0.225698311600114 +0.23628705101386382 +0.6943757614473537 +0.6492556234730802 +-0.002021807770635542 +0.8986538008470697 +1.5840678082161037 +1.2509061642471266 +1.687303017089245 +1.5888802932888981 +1.921645315484056 +2.6835428658987968 +2.3032655759272824 +1.4679425990448223 +1.1774005775930285 +1.129842927380703 +1.9118216340524619 +1.850775251913193 +2.1591763259276333 +2.358167511349998 +2.7410125036455186 +2.544426147490597 +3.0993069706685237 +3.7156775254198355 +3.7156775254198355 +3.8466607024626325 +3.8466607024626325 +2.9814226408973323 +2.4507176291698674 +2.8071139876166504 +2.145754108155215 +1.2565103380155207 +0.41787110725089716 +0.21404581360193997 +-0.4570541305710568 +0.03450791853643842 +-0.6245358312819346 +-1.1058740547133943 +-0.4028426940408367 +-0.13150596377832646 +0.1961953105230021 +0.9576321048714622 +0.3169267981890602 +0.9453559482092293 +0.2657109144919336 +0.17791192424523483 +1.1304385582211527 +0.40066699366707526 +1.1599289801368025 +1.9986712601250496 +1.9986712601250496 +1.4534414188107847 +1.1276330564326553 +1.1056900942525392 +1.0818578911078909 +0.13726780410346717 +0.4127785154780932 +-0.48969849973472357 +-1.4415323585069564 +-1.399990504047534 +-0.8107744303693618 +-1.4693391986532647 +-1.4477175695911986 +-1.5117027007635513 +-1.306436061288638 +-1.306436061288638 +-0.6410735753230248 +0.2797780241447465 +0.23005560720941498 +-0.1041128196618335 +0.8553925011301418 +1.2944825335621382 +0.463521590098279 +0.6661324913031859 +0.011651580761494973 +-0.5618549294118182 +-0.06588500068409364 +0.8661035449326928 +0.19077746091473857 +0.6891289294472525 +0.20046433372441708 +-0.5988518797525954 +-1.3212474793028828 +-0.9432651791150244 +-0.9432651791150244 +-0.04882073177324542 +0.1328375719156758 +-0.6366911700210414 +-0.5352770294219604 +-0.9390191073489892 +-0.8052788755096295 +0.02577546983532375 +0.5009496694723875 +0.5009496694723875 +1.3204382065324571 +0.9327026632416723 +0.2102653702781413 +0.7960512082368721 +0.8093676740654457 +1.0149342155853565 +1.602559295745275 +1.3894015275004885 +0.5365211989308205 +1.4843321738256916 +0.9589571642925647 +1.6876464011495933 +2.678230165280433 +2.9278483702053744 +3.5478434398628895 +4.408865370766813 +3.6431729395257815 +2.945464792369011 +2.564521286542792 +2.564521286542792 +1.9013354283483703 +1.202791249283172 +0.37159391031497746 +-0.23052995893172934 +0.6016892274715127 +0.14587517827361596 +-0.6047379971314962 +0.371419456094607 +0.33822970176950573 +0.9712834013385807 +0.6653579369120054 +0.8274440197695182 +1.3993307200745084 +1.907291040178551 +1.0538751110772078 +0.12616486883837297 +1.0293306304792837 +1.0293306304792837 +1.2451664912434428 +1.2477928014209585 +1.469956354154798 +0.6463659686991932 +0.43106941710776014 +0.43106941710776014 +0.5486951690276097 +-0.2179471112209429 +0.5709827410462139 +1.1277713597407235 +1.911732820904432 +1.911732820904432 +1.1894066120835456 +2.171241612779449 +1.6080502112910011 +0.8504398339760211 +0.8252856614561132 +1.1156276673861298 +0.12906556153811843 +-0.7203948732960483 +-0.057537814305599344 +-0.5237893833212325 +0.02579856509759859 +1.025794310993191 +0.6348802084537278 +1.5951529802485491 +1.979581601019258 +2.1194395410419147 +1.8265332423430856 +1.8265332423430856 +2.55297613569451 +2.417945317228329 +2.694303926619365 +3.3800707157436447 +4.07698386309869 +4.942204717506734 +5.851817306325677 +5.521644964660168 +5.308464065526432 +4.3759602666163895 +5.12525186219599 +5.326377524565485 +4.79927042405507 +4.689815137098255 +4.929345727381264 +4.629627410769036 +4.159659789926813 +4.05068341904969 +4.546862629263572 +4.063587336186338 +4.063587336186338 +4.032015131349558 +3.2969381542337883 +2.7285573255343767 +2.053204789329582 +2.221873332310384 +1.5487113620270443 +1.505113865462815 +1.0828201351846465 +0.16954457799413447 +-0.2257949679761898 +-0.4263310228761117 +-1.040810898200732 +-1.8798385315863504 +-0.9104671108270488 +-1.39290327005028 +-1.3382234486358728 +-1.3352465523599966 +-1.3069332764644592 +-1.4300465079654199 +-1.6044901533729106 +-0.7900887175738305 +0.11502348418593034 +0.241594638199506 +-0.000990606947717576 +-0.03372274644085449 +-0.03372274644085449 +-0.3780696651523462 +-0.9216745105945326 +-0.38989060818349797 +-1.2178853639686569 +-0.7723852686183261 +0.04150556502773872 +-0.4554652621028509 +-0.2747465159200081 +-1.1596810254173393 +-1.8044176870331836 +-0.8055953201347099 +0.05826494090949286 +0.7007113934598364 +0.9261113139264301 +0.39606475249174666 +1.0680753952386939 +1.0680753952386939 +1.515712364168163 +1.515712364168163 +0.5377717930673094 +0.49152692941629483 +-0.059371559187006206 +0.5519689778682456 +0.2277451733193978 +0.2277451733193978 +0.07492759531960591 +0.6893135225241344 +0.5687575592355398 +0.9008673015763131 +0.18820520563307097 +1.0558917179428726 +0.48901946607731683 +0.9734224531973963 +0.2628452928405205 +0.9522781692833275 +1.8967592154584418 +1.1382616158371721 +0.7761345001194678 +0.03051079356251185 +-0.48519384678240385 +0.044734102947166954 +0.6702931705512108 +1.3289410202278615 +1.3289410202278615 +1.7014962741866364 +1.7771840309851432 +2.5472053118497673 +2.578486071310234 +2.6670305110746115 +2.746335322054513 +3.561956864188521 +4.428976391331754 +5.293148963378353 +4.424047651222026 +5.0846419841566615 +5.660340387058884 +4.719702262069362 +4.839847845632121 +5.206051074551979 +5.258760352547945 +4.986936004682734 +5.780170391772551 +5.780170391772551 +5.584054336704132 +5.045569360405549 +5.744964169864516 +6.600460082341448 +7.4520447274752435 +6.729417926744681 +6.729417926744681 +7.297452667233724 +6.5730449511433555 +6.438075787142915 +6.440696001109366 +6.270407497344622 +6.245102992591379 +5.615721461741049 +5.265608907126401 +6.055378376332113 +6.607034436945168 +6.607034436945168 +5.713659569816303 +4.9939979238328895 +4.1747643008831075 +4.1747643008831075 +3.187982663246982 +3.988646340296162 +4.8883733243076835 +5.614010192654281 +5.919510302359403 +6.244671264390143 +6.684740609827168 +7.298048403854942 +7.298048403854942 +6.884858863921851 +7.202415214948397 +7.202415214948397 +6.490134400771264 +6.428593820743037 +5.773120010528678 +6.185844172261312 +6.453917883853677 +5.77169425805041 +5.77169425805041 +6.088056020007344 +5.870265791695463 +5.284996592095002 +5.604965528071124 +5.847870864137206 +6.769530748460829 +6.700582192155706 +5.808346113398845 +6.704302646127102 +6.704302646127102 +6.704302646127102 +5.952033434879089 +6.378337640301338 +5.979931667029193 +5.3494678866156615 +4.985113310384845 +5.613798010165723 +6.38523384106586 +7.185566137192461 +7.185566137192461 +6.734413902877809 +6.888605238139546 +7.000900245941334 +6.628944288318787 +6.09028174691686 +6.811147797706718 +6.140160229461141 +5.355934756498027 +4.622588158318794 +3.870215241579441 +4.821987171450434 +4.448201541192301 +3.464852055969576 +3.204253959308028 +2.467255336762573 +3.212183690324336 +3.178998742121127 +2.933121006578185 +3.624422719611786 +3.153285659454288 +2.592041843216991 +3.5026915258670783 +3.5026915258670783 +3.5536411943632817 +2.570226993036372 +1.7229418639101945 +1.3415467765041087 +0.5305178375031308 +-0.40501504037375824 +-1.096537994260441 +-0.5823459375941207 +-0.5823459375941207 +-1.532028848979672 +-1.4476776332746792 +-1.4476776332746792 +-2.251497681297434 +-2.8893068091280334 +-2.8996936493471246 +-2.8914953209776293 +-2.5033211152750283 +-2.172550973997841 +-1.988292850653816 +-1.2059800982935196 +-1.2059800982935196 +-0.9598326372062091 +-1.2346785085539471 +-0.47573850721036703 +-0.8090646751385492 +-1.807702480164009 +-1.807702480164009 +-1.1988222089918346 +-1.7472493473378536 +-1.1790331440533237 +-1.4608043718431265 +-1.9792994752841375 +-2.6499231504440885 +-2.6499231504440885 +-2.9622638428371055 +-3.314784649104279 +-2.463145619470291 +-2.1129560994074588 +-2.1129560994074588 +-1.643088419821316 +-1.7915104630679561 +-2.3795052570168274 +-1.728996855006917 +-2.4281919040190685 +-2.578645633530301 +-2.636173100530139 +-2.0617110704749226 +-1.174490859118862 +-0.20240052230747851 +-0.5407082531933257 +0.24991514842696672 +1.1011943207061554 +1.8163352548627418 +2.0739583231110954 +2.782298169391795 +2.381820810354457 +2.381820810354457 +2.049472582634557 +1.0605659658749496 +1.7052726922571158 +0.9266495453625685 +0.8312973261225923 +0.11634439607352653 +0.588491387983947 +0.6421404381379338 +-0.16964587238934892 +-0.4910333025631335 +0.038530799829880724 +0.07360198033356302 +0.07360198033356302 +0.3213296104540999 +-0.5001819574486717 +-0.024463875351302455 +0.16642006752965344 +0.05764143190161575 +0.9752428676220607 +0.5206581589850554 +0.8197179237115606 +0.5163762373631188 +0.5628613895333009 +1.296983251823356 +1.7191934069594434 +2.4977889534804 +2.8827335503942093 +2.359203283249962 +2.6969603946633587 +3.227965586571874 +3.040165318758676 +2.84973249971929 +2.2616756180853126 +2.738784077158873 +2.638199158059861 +2.638199158059861 +2.067960357188932 +2.5666124762980944 +1.932166934959787 +1.8908824444819645 +1.2740908497768761 +1.5839782104639468 +1.0330892599914725 +1.9179893262682102 +1.7752290758259623 +1.4040239586149577 +1.0553340352993574 +0.42860732363714504 +0.7933023964303734 +1.2191540184171383 +0.8763125669906439 +0.1385124043336391 +-0.6067466046854743 +-0.8572329756962143 +-1.1166787526803006 +-1.163949503410728 +-1.2984975143418591 +-1.6697947258569346 +-2.5752229321651683 +-3.0143666812583776 +-2.3233173518998544 +-1.7525390791855608 +-0.8347645148526186 +-1.349398485581486 +-1.417042734843879 +-0.8074841994767865 +-1.5904400066236892 +-0.6137267368602919 +-0.6317994505796877 +-0.5707594253329163 +0.10762140150357091 +0.3489288002918617 +0.3980502982584383 +1.1592067475476706 +1.1494114863692597 +0.6668573985042735 +0.5324435140719839 +1.268120867793702 +1.3094370468775745 +1.3498839751792988 +1.2898528863477297 +1.2395964606223306 +1.0536564158448316 +0.3968987714265553 +-0.23553763956433893 +-0.06327370733876769 +0.12619095938124003 +-0.6216260450547872 +-1.2881614494005251 +-1.339859276868805 +-0.6806418421355012 +-1.5607495081203924 +-1.4628269287119648 +-1.232538405024683 +-0.5857487304396831 +-1.1713436443259773 +-2.0125248425947913 +-2.5954764636942897 +-3.197646619477223 +-2.566873501878907 +-2.8924125595331085 +-3.262382779136396 +-3.4689789738020047 +-3.1793417106898323 +-3.7513088147881826 +-3.216366761469669 +-3.74813077997694 +-3.2577603061479037 +-3.3505934875891303 +-3.3505934875891303 +-2.6512701954948126 +-2.6512701954948126 +-2.8830342555475563 +-2.2160629891032535 +-1.4824451156717566 +-0.6657424556956042 +-1.0471112551445363 +-0.1685032652082148 +0.3442520504457689 +1.309701997243137 +0.3484632057877626 +0.041025490071627924 +0.0035459780283955133 +0.34287375917728236 +-0.20101379733612412 +-0.31019690111752996 +0.15073187129641308 +0.8489190671060768 +1.7956966205269067 +2.209150600370795 +2.209150600370795 +2.4808917626755456 +1.9731383275629613 +2.435443739327548 +2.041084000174566 +2.1826416570376312 +1.2876970055263663 +0.768914000300712 +1.2208638000590184 +1.2535659625689117 +1.810513974395905 +2.58033097659757 +2.7897921498310287 +1.8851439892879027 +2.8622302323565267 +3.46654799160501 +3.102214592287592 +2.6042376758474215 +2.5304290640272042 +2.802609822170815 +2.1324491579374047 +1.2877302950600253 +1.457456665015446 +2.364693045697121 +2.285375912591693 +2.1492963347618503 +3.148058889873279 +2.234611502487456 +2.045999221106562 +1.233247595362009 +0.9202525855856095 +0.8320268202850591 +1.6679131888996106 +1.4803839245792152 +0.9288472835268546 +0.12798023255285074 +0.6352779356157265 +1.2281899962148108 +1.586964546475618 +0.8608083327307474 +1.6672982166127244 +1.3509914125702274 +0.8507751255622582 +1.4495039477856335 +1.4495039477856335 +0.9882394580253951 +1.8820485217632612 +1.5786094755748201 +0.6251667370993828 +-0.0572000829837962 +-0.39671683947766667 +0.03670194415939865 +-0.4906930439360314 +-0.09277578436528111 +0.5690161851101784 +0.18272818741118702 +0.9300589715796121 +0.3028383472651066 +0.892581815036827 +1.443827869920982 +1.7379037159731008 +2.2119930081154915 +2.2119930081154915 +2.614660771429836 +1.6562327679083022 +1.1954864191072825 +0.799989917708758 +0.2517503572527652 +-0.6331489887321774 +-0.697381502796595 +-0.1346473349921793 +0.5666374257744142 +0.8108636700997751 +0.9813366182866874 +0.4271755361451135 +1.0195436991412385 +0.6573623713261686 +1.2568500401458271 +1.0855300661556146 +1.2583845162134768 +1.8794864884586033 +2.169337120688475 +2.597053306438167 +2.747698954281991 +2.747698954281991 +2.8933241610858285 +2.15281660327096 +2.370778656719071 +2.366421309362706 +2.002296811132589 +2.9811546901807517 +3.350023658139139 +2.3809403626851315 +2.995933574617523 +2.6372400077958487 +1.9937208995878828 +1.6931380332923847 +1.855176922582331 +1.6518176396741233 +1.9442846573458954 +1.2666155745164085 +0.6353038152793125 +-0.19233145107925642 +-0.6945093473683375 +-0.30395485462889704 +-1.0570994731038252 +-0.5837307970629722 +-0.7324581080066314 +-0.04860803353589327 +-0.11127850859674426 +-0.07887073423494573 +-0.305119782751882 +-0.14717119274907142 +0.122511620822923 +0.2958653903818912 +-0.12908049422774992 +-0.8446506874686937 +-1.2465006224990351 +-0.6393808457732628 +-1.6255915186457683 +-1.5308428129287863 +-1.5308428129287863 +-1.0643534847697782 +-0.15654099839532454 +0.0022680022610401807 +0.5878973832443986 +1.0506299484357648 +0.8001434177336278 +1.2155798594156897 +1.0181046958735993 +1.1348777180056386 +0.637709179520585 +-0.07800892666945558 +0.3624853114154364 +0.49847780858817237 +0.6937057998067045 +-0.0013645014718394188 +0.5602536262301551 +1.220567867380101 +1.220567867380101 +1.6518838740899764 +0.662550561316767 +0.29751986494142313 +-0.3536425043742214 +0.13186033022207055 +-0.7127295731124238 +-0.7127295731124238 +-0.9174134187322307 +-1.8715808083756258 +-1.1253679910526553 +-1.561918006522728 +-1.4590860843624964 +-2.160066535616953 +-1.6242353918064674 +-0.6680187084574982 +-1.1654675974521673 +-0.6644359083273728 +0.22987516003639108 +-0.5338034313199149 +0.36711077985667706 +-0.010900361449686868 +0.7503553705670113 +1.3037856380205417 +1.1175060517543347 +0.376651039477933 +1.257019749124929 +2.1858495749992017 +2.91734654319215 +2.285377839262796 +3.0919756245666297 +3.654304850678191 +3.8329217591331677 +3.7314696039472124 +3.858037987995691 +3.1428849848301113 +2.251279782138792 +1.5740704699944466 +2.1547148096152595 +2.654531609044022 +1.781644503963895 +2.083355590480548 +1.17565570082554 +1.0389421940594996 +1.1444892879577255 +0.9277444417747375 +0.5729345857360104 +1.083404108273553 +0.9694255746453028 +0.8140258533066489 +1.0726773506896867 +0.428530656264382 +0.23713469454836622 +0.5736665046323018 +0.9629207227824715 +1.6051332618042848 +1.6051332618042848 +0.9096018202618099 +0.5168943394491893 +1.3880942510203407 +1.407725573126715 +0.8521471525302677 +1.7068138827468007 +1.6479469885109856 +1.733259532425898 +0.8287177289683556 +0.8035326939624624 +1.3044394361265832 +1.4175769910131653 +0.43476126963041506 +-0.3445088458112908 +-1.318510196186015 +-1.3065139193434805 +-1.7425385956186643 +-1.394202352459839 +-1.247458381200244 +-1.657462516569892 +-0.7831446929846315 +-1.5609944953836354 +-1.1420974178845507 +-0.15727439610293747 +-0.8613268952714046 +-0.7787876307018637 +-1.7740168681750563 +-0.9315998378333419 +-1.0854292629845332 +-0.7813776972918325 +-0.4962751238938319 +-0.602041107489894 +-0.3640206359796324 +0.3627608497590825 +0.315574369517176 +0.2898993743147601 +0.9734797346155907 +0.8696568898243984 +1.4789562743715625 +0.7399761064786194 +1.363360303484579 +1.5280890392310076 +1.3909554649493678 +1.3190058143398025 +1.8912933520477517 +1.1330926597399755 +2.0452659813828644 +2.696209348185037 +2.311327731428157 +2.311327731428157 +2.04093824688845 +1.8960134307253682 +2.4226886483438523 +2.0745808694394605 +1.6210915489545874 +1.6385199347548691 +0.8446028111160919 +1.3233200851589917 +1.1335994716515225 +1.1335994716515225 +0.28538135263813835 +0.768989652116937 +0.5244045083852295 +1.084367237001398 +0.8308045913335952 +0.9811803925382537 +0.5954585838681237 +1.1306000763387338 +0.7588498174085673 +0.09085167899819913 +-0.44621280699248256 +0.34875392039277553 +0.9478724678824636 +0.5824815037447779 +0.6655263350919538 +1.022640499045698 +1.5314970712788796 +1.8759685575204847 +1.0501816922472305 +0.46070018452921513 +-0.0047316240719731395 +0.9254494150667537 +0.6639937823864444 +0.861485753430276 +1.7743327820936583 +1.8912619781586244 +1.7850077123328036 +2.1202357319773015 +1.759412247897422 +1.6699420185770997 +1.735102142772236 +0.935374679481108 +0.8151744981967975 +1.2687547750249895 +1.6811576824447274 +1.041719283461694 +1.5835112661037312 +0.7047560178684582 +1.3813794144632279 +2.1383925199138076 +2.843623769055799 +2.7898857612690926 +1.849093994520964 +1.3043548420088853 +2.098547530717989 +2.1335853090897428 +2.9644484246801506 +2.32427122771636 +1.3552414964588686 +0.8150704895339891 +0.9305208393407887 +1.1373885450361925 +1.327174852762859 +2.2613439921338045 +2.2613439921338045 +1.7769436876287723 +2.1673961307771172 +2.073345552417985 +2.073345552417985 +1.2080190569939326 +2.1668449539144077 +3.0614697920292766 +3.8395986430232085 +3.8395986430232085 +2.92585517929246 +3.026001693048764 +2.105388564661294 +1.5419056508137452 +0.7790343539698756 +0.8183759207385655 +1.1719892853460487 +0.6896689482828763 +0.47728792030170686 +-0.35916013151917614 +-0.6983618970140443 +-1.45706981438352 +-2.4358073013177175 +-3.098312637528943 +-3.098312637528943 +-2.4017795578106944 +-3.13145781492035 +-2.7787674916773906 +-2.6167349623352854 +-3.2277023472982007 +-4.162316167289724 +-4.328266851862668 +-4.425058498763578 +-4.78146505193935 +-3.8115464544428233 +-3.8049183283679273 +-3.294456482400112 +-3.294456482400112 +-3.635132579328636 +-2.655336549179866 +-2.9662042617816975 +-2.1558931004193935 +-2.520720122527496 +-1.7554340426344173 +-1.9999556048272016 +-2.5301190489019616 +-2.574732154061536 +-2.007384270786753 +-2.2864087756362337 +-3.0423484176011986 +-3.90233269985499 +-3.7419369511428116 +-3.7419369511428116 +-3.429365796739712 +-3.3957074851935563 +-3.3957074851935563 +-2.8760670001176547 +-2.4525907877303883 +-3.2291433147959117 +-2.714492255177104 +-2.714492255177104 +-1.8155692607551308 +-2.4663746144013636 +-2.4508764495406163 +-2.2169434640499066 +-1.7232993912005254 +-1.5428017325807077 +-1.7968184554947517 +-2.4451808091100147 +-2.834217338898984 +-2.7716725085297087 +-2.3296662061340134 +-1.8359357815008714 +-1.1166815848178993 +-1.1166815848178993 +-2.0792091456655655 +-1.5590764812993398 +-0.820620625017898 +-1.3051539497497582 +-1.1752792232715508 +-1.2040612715468129 +-1.3535133877821637 +-1.4858056415008538 +-0.8244119112854553 +-0.5772749073049646 +-1.5702920992294074 +-2.5396486350927763 +-3.4621133197570084 +-3.3890642815805103 +-3.1112408841944097 +-3.8515793835985095 +-3.8367547486092675 +-4.7453785784624785 +-4.848157763733236 +-4.727024953274934 +-4.041219449219454 +-3.3476394691278695 +-3.164304019622042 +-2.556975598787745 +-1.69453310434174 +-2.342922324665339 +-2.449144495024074 +-2.725268607246487 +-3.0425344418620566 +-3.1770770838538036 +-2.5987058103609186 +-3.0319934720999537 +-2.29379392228497 +-2.2874684897383046 +-1.6720064128834058 +-2.30350701349479 +-1.6411891270539956 +-2.0751152476124752 +-1.587672036626992 +-0.9181228433751716 +-0.9396096941387085 +-0.49863230505301803 +0.4167793188906227 +0.6249607797676483 +0.5936052691973999 +-0.22093070409056748 +0.7054473984642775 +1.1673470725566337 +0.2437192910921111 +-0.0865273371919314 +-0.6411005731212803 +-1.033175940953797 +-1.902436758259915 +-0.9513471740331343 +-1.2426286742022197 +-0.9813676720555942 +-1.4615107196907036 +-1.2111935407445895 +-2.1395535250353945 +-1.357275895679601 +-0.8585139865401115 +-0.6835725049417265 +-0.3988375306724632 +-0.5779296973440912 +-1.3110891069300807 +-0.7246464999714475 +-0.9838175941491422 +-1.6724273396946234 +-2.4863860157574593 +-1.7630774775101994 +-1.7630774775101994 +-1.9473042056555765 +-1.3234979970776832 +-0.7838052299023495 +-0.4283349593442758 +0.054086271967756616 +-0.3661078229325526 +-0.05714345229131934 +0.050029865079420976 +0.21436529161615148 +-0.202201120796198 +-0.17790634058110655 +-0.1910958838263338 +-0.7804708434038762 +-0.2043295990149766 +-0.953292244401719 +-1.3236462998827432 +-1.6104086494294614 +-0.9126512819380384 +-1.6098066122872237 +-1.3548849754093737 +-2.074486087014212 +-2.9937109669757085 +-2.3570207745273914 +-2.132179598656185 +-1.6890609046112914 +-1.720003466910414 +-2.7180642254228573 +-2.7180642254228573 +-3.33287093288885 +-2.800465001880735 +-2.032321861739807 +-1.1240418537986492 +-1.5136406511350722 +-0.5553096320374866 +-0.5299371208403911 +0.09857015760620191 +0.7048635667036467 +0.10598269030873309 +0.0635142538731891 +0.0921704974118257 +0.29980275786157373 +0.8824851054831363 +0.6033246538630475 +0.40025878008729177 +0.09376610422595189 +0.06766855130861205 +-0.48833958992913507 +-0.49977234157105266 +-0.7346338463895107 +-1.4099941098985447 +-0.997610130176867 +-0.7999223088674428 +-0.9655710296164192 +-0.92058552153194 +0.03760943724984356 +-0.39699350559943025 +0.47592325955302983 +1.3368095438148 +0.3635398934264482 +1.1236492469029722 +0.9701033770051061 +1.037004725246856 +0.5856785714622671 +-0.11445218722216921 +-0.05439020073823786 +-1.0498918874748036 +-0.43337127404152964 +0.23316802153652616 +-0.23763414364525615 +-0.6813750414661812 +-1.3016717236182724 +-1.5834785332738077 +-0.8664714967668421 +-0.8664714967668421 +-1.3064324896287194 +-2.069330603931289 +-2.0775249426180746 +-1.276806602068619 +-1.276806602068619 +-1.3508272061584625 +-1.3508272061584625 +-2.148806125249343 +-2.647523216875803 +-3.513815568560275 +-2.5230927910103866 +-2.1141570128433314 +-2.7191191300171593 +-2.9200622713939652 +-2.628249065372362 +-1.9023282175196705 +-2.6531493840833447 +-1.99560134458903 +-1.9832786261230384 +-1.387781601801782 +-1.6816016932711921 +-1.9615831766914784 +-1.234145317524756 +-1.284432322726747 +-1.4437841872771222 +-1.1442066791381422 +-2.065485835288258 +-1.6661505281932725 +-1.1766497333018968 +-0.3609577360515275 +0.016344801044898327 +0.40551201814533044 +-0.5044831169561632 +0.345166783425656 +0.34336917794822075 +-0.1699695104178528 +-0.2412034546430124 +-0.5469480116775901 +0.14904824933511518 +1.0587114330811525 +1.0759219732538419 +1.451874255886548 +1.061160115923495 +1.2417655382612516 +2.1918428223305355 +2.7596454692120673 +2.3114780260881833 +2.943560025778848 +2.023402769108978 +2.8491205904840995 +2.958021703238977 +2.8723002202878245 +2.7913895130328417 +2.468711330644022 +2.6309223461957014 +2.723498147944481 +2.82770245763258 +3.078363399865982 +3.8576429885483865 +4.318491186056823 +4.807166827393276 +4.2948578693372745 +3.728788966018901 +3.032913768341503 +3.255123672745599 +3.71349987474992 +3.522945087915512 +2.6183792957381513 +3.146829974150285 +3.5749330282916616 +4.083128817908998 +4.671398792339499 +4.255654108186205 +4.255654108186205 +3.3202427591755477 +2.6427207577231226 +2.3619807374933686 +3.167141766904401 +3.443567368737313 +3.011592468463285 +3.680917064920452 +3.1856626722629993 +3.3099867958164 +3.5250395119015607 +2.593487673882457 +1.8416624542312412 +2.4040593112809443 +2.187912879058561 +1.5845048188649091 +0.6592459878727326 +1.2743560198525021 +1.7843774946916537 +1.0764257156263108 +0.7367643846029749 +0.579997258652645 +-0.08310173568764401 +-0.4933442664379776 +0.026217799537761155 +-0.4024059675435776 +-0.0967302051395953 +-0.4481699739903723 +-1.0685365778226754 +-1.0685365778226754 +-0.9496528110381677 +-1.4717446697226142 +-1.8457528836156327 +-1.644700078361804 +-2.289726170207765 +-1.5246633752812935 +-0.6325526746922872 +-1.1485767408635048 +-1.0897707930252896 +-0.8483538302843106 +-0.8626611121807223 +-0.8626611121807223 +-1.7815437978913389 +-2.6778706512238317 +-1.8648641237142654 +-1.886632520111565 +-2.746985601637152 +-2.3418043981830152 +-2.6759818998918536 +-2.6759818998918536 +-2.0116957556735104 +-2.129484601384636 +-2.292949518298234 +-1.5760807991035592 +-1.2292586344495622 +-1.005329988133103 +-1.8246189636297712 +-2.7419036540474564 +-1.8440379223939374 +-1.473349263360243 +-2.1479422405622506 +-1.5172502958611755 +-1.6821291559316065 +-1.5152568164562166 +-1.0766273822726293 +-0.6092987778204033 +0.38661541202880634 +0.12068080137649162 +-0.0034199488564519154 +0.5243587692579506 +0.7201772031056217 +1.1225090624340799 +1.94131505011741 +1.9403039042925694 +2.521324291133382 +1.7302329814389108 +1.017225550681157 +1.188106426264385 +1.6355312616731812 +1.89592053927951 +1.0163492088406485 +0.6689877949225517 +1.4847842719442332 +1.9618464218651688 +1.9618464218651688 +1.1288523632094247 +0.7736632907336948 +1.2533239389291047 +1.4926633686294126 +1.3731646213425512 +0.9908905084015466 +1.4797931437952645 +0.9667944662439996 +1.772455609371263 +1.0500436321594473 +0.6342148992312232 +1.3329502529989035 +0.7037288555134753 +0.791893324935453 +1.1503880559427766 +1.8335766241712235 +1.3662387916285064 +1.5857136754587928 +0.915650125099394 +0.8921427185117478 +1.6833388135487275 +1.6833388135487275 +1.803565312097851 +1.213517674501644 +0.4403264998136769 +0.4403264998136769 +1.3044431827272098 +1.4721185488234247 +1.7113144789073313 +1.6456743972775798 +1.2117323145265289 +1.5406510552423298 +1.5406510552423298 +1.7292543042202997 +1.7008902830568764 +1.9362785452940403 +2.679524797179912 +1.9350593006259933 +2.4438043044019615 +2.9190688178830344 +2.541009430937449 +1.5988060907161805 +1.7541347613624045 +1.539392475464913 +0.8546779261439565 +0.9238013733181811 +0.32508730084496773 +0.37504178355378803 +0.5520277685089938 +0.8268863706102669 +1.0930947100982318 +1.2004945803742173 +1.4209868909130123 +0.6687720754886757 +0.028786445734652943 +0.330192489980609 +0.5421991650444815 +-0.24410677572390904 +-0.057674770750409055 +-0.865096707070298 +-0.11135942372814056 +-0.6411619829170685 +-0.6306893172362862 +-1.1533567454947244 +-0.27706189445536267 +0.48916183187807283 +1.1129559240254125 +1.7294814140669152 +0.7452903512279361 +1.745137101924639 +2.211247064206928 +2.599434617143469 +1.6843510711622358 +2.632247708768759 +2.906313893129688 +3.37802426022185 +3.37802426022185 +4.122411594622928 +4.122411594622928 +5.045014701441708 +5.239383196170451 +4.945445035477329 +4.652744755020776 +4.043906744497605 +4.935233937198208 +4.782096026810092 +4.782096026810092 +4.46489408281758 +3.61616394834076 +3.0529491643474636 +2.963286749382658 +3.5742865107584176 +4.286661648582877 +4.318677250697483 +5.08616247615549 +5.08616247615549 +5.231013100412753 +5.483437773171586 +4.716400800017463 +4.705422020025453 +4.212386708013518 +4.93358920207974 +5.33225824417008 +4.80640524849078 +4.808851475605383 +4.36520928414901 +3.8872568983675193 +3.198544346248487 +3.198544346248487 +4.191773030027412 +3.6686604982388173 +4.121003839447356 +3.7737296906121425 +2.973126182680944 +3.2405149537816977 +3.388312768476882 +2.678256483266438 +2.67492639790346 +3.362273247713788 +2.619600297122232 +2.940886228939881 +3.6355084291213613 +3.0420774725492796 +3.1045511955961107 +3.1045511955961107 +3.3292215224196964 +3.9439878047831627 +3.455451162654136 +4.404799396363464 +4.613145644157636 +4.0053150006682845 +3.4780195730002004 +3.6284204068857484 +4.294728553501939 +3.9485297576322735 +4.392712732166655 +5.211886281044327 +5.45218031605034 +5.847143860246212 +4.944025324076241 +4.973208036880402 +4.740060372567706 +4.563229955160399 +4.79539066411008 +4.036314196025709 +4.484558964915699 +5.3107095050011175 +5.783223345650402 +5.470077516905425 +5.75952923043822 +5.20879336498784 +4.367549707606114 +3.8314494086264768 +3.3599004624478006 +2.633690986959058 +2.6980892951807514 +2.6998974606215556 +2.8825205158988823 +3.7203013723099856 +3.2630344198077403 +3.6222505458082184 +3.0971546160932943 +2.131251619072013 +2.725429700940468 +2.2850670525064603 +2.1383248765148584 +1.6927644019346144 +1.6941836267418113 +1.78529954510661 +1.8558834200818506 +1.9645883139997753 +1.1558891167067733 +1.0734515979343562 +0.9165270648783469 +-0.054614532244536496 +-0.2145904985864997 +-0.9579257963005681 +-1.482245658554602 +-1.430851898892081 +-1.319131018399306 +-0.8449106142673064 +-1.2106848744315077 +-0.9389460066736914 +-1.1613733802433641 +-0.9352701254513642 +-0.24277268452212875 +0.45031948810130995 +0.707872648417468 +0.10882463909671314 +0.09804137196750318 +1.0349126932393573 +0.04003733134377008 +-0.14811856580903882 +-0.028987227717320763 +-0.8648032066083072 +-0.30243215098697374 +0.16140823458679432 +0.8659892570831708 +1.240086731136243 +2.0393719741658964 +1.5773198025783102 +1.7750388921307105 +1.7257215919417392 +1.7257215919417392 +1.560699014699193 +1.7517562264851059 +1.6976407087448804 +1.2700228664914102 +1.939924847224609 +1.8259477468074876 +1.3214951203924803 +0.5550857046228068 +-0.3789010977866867 +-0.7621869050373057 +-0.2035666126217649 +-0.09097887802684113 +-0.9054786463096222 +-1.6151208480309287 +-1.6124998172010514 +-2.1438460093015372 +-1.4598719386022592 +-2.084925039987734 +-2.084925039987734 +-1.2877978073343606 +-1.4600072772898978 +-1.4590234712761672 +-0.7065561026795479 +-1.6546224225112593 +-2.1351324391349613 +-2.489617784148222 +-1.6391226228087854 +-1.6391226228087854 +-1.4217762232273907 +-1.82232319543578 +-2.3192043100149897 +-2.968470106017067 +-3.3130943573055824 +-4.076246597036452 +-3.2391846919357885 +-3.9449679285709256 +-3.9449679285709256 +-3.8694500348747476 +-2.910055221347621 +-2.1082169984090795 +-1.2177497204707972 +-0.4338151316365828 +0.4062600728492203 +1.3838224283422111 +2.157052928769403 +1.7916806095619155 +2.5112769188173454 +2.115904727190973 +1.5554606511493243 +2.3305472206100086 +2.396578934061497 +2.5870732425612966 +2.9778786286126038 +3.8089269290602363 +4.207917880700586 +3.304003515748054 +2.941123223910862 +1.947627547809019 +1.2332577059856613 +1.2332577059856613 +0.5654397032040863 +0.2283263343541141 +0.5153958596032525 +0.5153958596032525 +1.2223952288371667 +1.2258666132244695 +1.3942664686223964 +0.54171147747064 +0.54171147747064 +0.7178161513977199 +1.2766073360808732 +0.7723683258711636 +1.4392148365627873 +2.090287603497117 +1.2433333850673307 +0.9995458032653802 +1.695754720371538 +1.347997244339247 +1.4999480011199418 +0.8227257171205413 +0.15890656482632726 +0.3212614389970325 +1.2976964539019826 +1.8711429102959103 +0.9708556472603849 +1.0157612294796463 +0.15656660830406754 +0.43093122868096434 +0.9933178373358362 +0.8879981349036637 +0.8718631886456103 +0.97914830619512 +1.0762605771652933 +1.4993632793417562 +1.8293215217465228 +2.8185931548740024 +2.5273737271989933 +1.950102693068962 +2.152470957976359 +1.6839804077014477 +2.4989741023587024 +2.006619440194395 +2.5817466049313307 +2.378180615725256 +1.8024843879202173 +1.0490934393355626 +1.3302697185471384 +1.0033673278287902 +0.6740605231265336 +-0.11217410266415528 +-0.0037138242013760037 +-0.043074596966835355 +0.8658964321909617 +-0.03818653900369329 +0.7242066914683734 +0.36479812403238554 +1.2877895664487755 +1.8756134653312861 +1.2362103076101587 +2.1375127006720698 +1.6257178471702625 +2.2936525916965684 +2.187076062030246 +2.0286838081205936 +2.84293825106108 +2.5486340184871987 +3.377244659455335 +3.9273030371229067 +3.183810991514072 +2.9465694088408516 +2.8031475663810888 +3.5543694036300115 +4.419400372576051 +5.296397955368381 +6.036634565595988 +6.036634565595988 +6.372786154677746 +6.372786154677746 +5.75066152764102 +6.183424937875923 +6.5094042962794845 +7.163581336846585 +7.42261030166229 +7.1174371318046665 +7.409544442356875 +7.980861626009548 +7.019212630289527 +7.600583233515884 +7.180726775589697 +6.292157205437156 +6.012731561160114 +6.482462417623314 +6.034812522682948 +5.307953936463839 +4.891935532232988 +4.8008752443257 +4.850834659360031 +3.9209873053461197 +3.4094316570402015 +3.9490807014090645 +4.253086980845621 +4.758022105091293 +4.273409726648637 +5.206257025696177 +5.9305130901475165 +5.584173038212341 +6.432845017755238 +6.287186443074259 +6.287186443074259 +7.214773920357125 +6.922270867575746 +7.534169118686789 +8.519381064655759 +9.483260849402349 +9.483260849402349 +9.2437561922178 +9.962543282844878 +10.937547432584601 +11.210704688658137 +10.481082060757316 +10.55644466576577 +11.18244833821258 +10.80226877046565 +10.805579531854521 +11.126817179695754 +11.990207212003986 +12.442021912032454 +11.932432262720019 +11.490250933489914 +10.6897915661147 +11.332079878219927 +11.278091838462679 +10.626476310957681 +10.626476310957681 +10.817181100431473 +10.988380105809922 +10.822926760155493 +10.822926760155493 +10.050966489245843 +10.694555408383291 +9.979424403582883 +10.036693120656 +10.036693120656 +9.325768258649104 +10.018882543778677 +9.46364773144872 +9.42967751742874 +8.986798130739542 +8.986798130739542 +8.352192491916023 +7.739111012721555 +7.739111012721555 +8.505372086464565 +8.453018905810465 +9.087468328432188 +9.087468328432188 +8.52030927618847 +8.52030927618847 +8.560966382985736 +8.417227709961763 +8.417227709961763 +8.658228593453568 +8.208864640999098 +7.66770958639505 +6.674342156462163 +6.700808118037678 +5.899124226656643 +5.082792569479321 +5.679859622373954 +5.172217537494748 +5.158118397975792 +4.388118956429267 +5.359467222328616 +4.375980287543807 +4.4003137255182025 +4.439315048707554 +4.666163510016073 +4.666163510016073 +5.506661072356119 +5.395173054859776 +4.715898037083718 +3.799124787281701 +4.37822915124663 +4.37822915124663 +4.083730282334147 +4.662031521233338 +4.384840100416883 +4.384840100416883 +3.8452091023297648 +3.7541365006800835 +4.2218646279496905 +5.178747535047189 +5.500227190874412 +5.724610893248757 +5.3326428347158945 +5.649366611740186 +6.30988658723271 +5.382146267569441 +6.0365884774463705 +6.070364183593839 +5.178632675885627 +4.725502013652799 +5.70408585615985 +5.280604724777182 +5.702287282863892 +6.528096612833665 +6.528096612833665 +7.401436755844104 +6.687374390873535 +6.687374390873535 +6.043418618635233 +5.270274582173375 +4.425880023506313 +4.425880023506313 +4.514909437818292 +4.748908178040596 +4.848516921943441 +3.9227803679321362 +4.187162875787013 +3.682409508082464 +3.612735766011824 +3.2537194647922356 +2.9828105641263476 +2.9828105641263476 +2.9828105641263476 +2.9828105641263476 +3.0279480822177423 +2.8072107871934433 +2.6397051581880633 +2.624853999534988 +3.236373645958163 +3.5552483786641647 +2.6206574691796636 +2.361235245474659 +2.7959881474794477 +2.6008333792480447 +2.503919015020686 +2.3806873896230174 +1.5081056236798 +0.6776018783865501 +0.19535553422995566 +-0.2440417332614444 +-0.961562275495148 +-1.556852775625745 +-1.5494600498062012 +-0.9648889475337743 +-1.7067482337126483 +-1.4008603818858911 +-1.5012961068690096 +-0.8462690890731512 +-0.09779249227330222 +-1.0498094632478665 +-1.0498094632478665 +-1.0764778868003422 +-1.2884467214443687 +-2.0076052488368794 +-1.1136329813836086 +-1.0758142289317145 +-2.073199565494036 +-2.643068615386988 +-3.309813996247842 +-3.15471616428687 +-4.112163067793151 +-4.757628613551212 +-4.875097765225437 +-4.146559273554076 +-4.7364483027398405 +-4.94465665069217 +-4.681337712747277 +-4.046949074179722 +-3.8310156929934704 +-4.178262016937803 +-3.250084344421131 +-2.435910057377776 +-2.435910057377776 +-2.062055059099654 +-1.5421240037447022 +-2.039104722144136 +-3.0014171991779683 +-2.493779765530754 +-2.6659886654806217 +-2.4382733643014918 +-3.3847379938612168 +-3.199085824153465 +-2.6717402622600774 +-2.534018792334582 +-2.091052099221965 +-1.6522019655865388 +-0.8840704496699527 +-1.2828791193499667 +-1.8298765687414367 +-1.5702121418239214 +-0.6427239283606598 +-1.0692070827660958 +-1.9852811381053121 +-1.3381919398863487 +-0.9110096713547704 +-0.3764733820065742 +0.2719026022896751 +1.241572525735201 +1.6229480712391517 +2.5449987468255983 +2.037202177585037 +1.284460128585159 +0.6319986319394966 +-0.2612728871865848 +-0.058857888222008325 +-0.12843633227801343 +-0.9424739419183586 +0.04265265979946309 +-0.3222553771375287 +-0.21452396992815648 +-0.8519974770709107 +-0.5425606969709755 +-1.5190387337647195 +-1.4762465384447938 +-0.5560642730689125 +0.34489672199202115 +0.32309733341052393 +-0.27810368412343245 +-0.7687761167782803 +0.17950440576843318 +1.0493440886686825 +0.24257604542344158 +-0.6220216840967421 +-0.7636889007755187 +0.13384635591450678 +-0.17767928805814526 +0.8023120246201871 +-0.023069962826794077 +-0.9568270567179675 +-0.6427446561936525 +-1.0810256128079136 +-0.4191962739032986 +-0.6721870660162595 +-0.7262557994309486 +-0.08466286161023118 +-0.386781992427084 +-0.1352210966062558 +-0.26510879083458905 +-1.2633729080018818 +-2.084556254381023 +-2.794125449314657 +-3.6439239879714176 +-3.679228261461835 +-4.523121879128648 +-4.402093232064827 +-4.282717077801377 +-4.913441393910786 +-4.8872982135043666 +-5.525214845606688 +-4.935720095154066 +-5.848422261113018 +-6.544208333573578 +-5.841220514629043 +-6.192969225550958 +-7.184460459582394 +-6.4981895370394165 +-7.054929899469899 +-6.132191928198493 +-5.5316482347127 +-5.461624522184094 +-6.037323811273507 +-5.476226959912355 +-5.720114493016607 +-6.2796930575532635 +-6.2796930575532635 +-6.078543703083563 +-6.394510864932504 +-6.4783237032358025 +-6.396822323205603 +-5.415725301080629 +-4.91052801071958 +-4.9503419989166035 +-5.6604442325367845 +-6.564207461049332 +-6.564207461049332 +-6.132085622900207 +-6.77182780630703 +-6.337725120270613 +-6.050011178594287 +-5.63741775990758 +-6.508480804494767 +-6.508480804494767 +-5.639251952975233 +-4.788391220005883 +-3.91110289913764 +-3.2913426090520588 +-3.2913426090520588 +-3.2913426090520588 +-3.457458581881892 +-3.051042264615928 +-3.3578413607957045 +-2.712637742494396 +-2.0978603822295705 +-1.8287077996334142 +-1.4034746623648628 +-2.2913557440068084 +-1.4354529460497139 +-0.8223503508321142 +-0.5368476176825911 +0.10483323649246357 +1.0838357176783138 +0.6969221887454519 +-0.03822112425643687 +-0.6632856467352876 +-1.3745461434419535 +-1.0620318057424458 +-1.8997181756352641 +-1.4650573864693501 +-2.2439593219677905 +-2.961003729187981 +-3.225587661970143 +-3.9960158421358813 +-4.170965079326363 +-3.54484551954058 +-4.01314173655256 +-3.435617972149533 +-4.121090766269431 +-4.209298094200533 +-3.8827996931443587 +-4.482833250950522 +-3.5293892446364667 +-2.548166500074442 +-1.699760912901843 +-0.8422077740910596 +-0.18766110457986906 +-0.08998108086459 +0.6530627066391292 +1.3269805867504085 +2.016546676528625 +1.7131785928229735 +1.5833641979965623 +1.7490583928324146 +1.4589040234887256 +1.0591802369210916 +0.5085446447024218 +0.0827320127570973 +-0.5918524606136036 +-1.2054412385253919 +-0.24219567212917048 +-0.7448829167575317 +-1.5955308971880147 +-1.0598841772272187 +-0.6783324011081344 +-1.4659251975515462 +-1.7672050729259086 +-0.8170234425572269 +-0.5413193019872093 +-0.8185229363994898 +-1.6526731338785994 +-1.5025352373494087 +-1.2306872039445786 +-0.437704129246534 +0.485784541070716 +1.04921846186223 +1.7649409252206028 +2.4041402802851737 +2.7319354759505714 +3.2182421210642387 +2.8134800064869645 +3.4445843234863514 +3.6685313890632987 +3.4108222702089592 +3.4108222702089592 +3.9954153847691614 +3.9954153847691614 +4.1790709060130755 +3.569546099260144 +2.967622498049807 +3.6271313645428083 +4.600875351360504 +4.719153284760887 +5.217830628669102 +4.771112922802262 +5.138563503502642 +5.295383467444644 +6.178159823324208 +6.867284112599072 +6.261281457058078 +5.286840896620459 +4.424222800032748 +3.9267644927926497 +2.9978338354811487 +2.576216372888189 +1.5991764581978887 +1.2304709000273735 +0.8292158506787511 +-0.11274243583174515 +-0.5903948828722831 +-0.8919364891021005 +-1.363588770525034 +-0.8299701526068544 +-1.7262025882298733 +-1.4968567170104226 +-1.8754301125837793 +-1.3918807777081792 +-0.8358037663761417 +-1.0356762965365398 +-1.443333198219292 +-0.49521178528069343 +-0.44481809375673276 +-0.9681740318315282 +-1.2282395205553165 +-1.7089536559489265 +-1.0405745926912449 +-1.1286027435416397 +-0.13701653055058016 +0.34203042440455955 +-0.393809170187603 +-0.625231805572067 +0.10896477794256387 +-0.030140886700678937 +-1.0159837088488028 +-1.706578027551579 +-1.3587627938998095 +-2.326236212171443 +-1.434019821876471 +-1.3764445666149938 +-2.3743066813715488 +-1.9044978921672813 +-2.581471855841854 +-1.5952354335302374 +-1.3568594797565356 +-1.0212929213543729 +-0.5277064425012183 +-1.3032849393814834 +-2.074622481121138 +-2.525228088639543 +-2.525228088639543 +-2.325959686928411 +-2.4131469504150838 +-2.851247851849191 +-1.9489464374104093 +-2.7466240632170944 +-1.985881707895604 +-2.671355461298632 +-1.6816153601266706 +-2.170299654121673 +-2.2823658532543813 +-1.921221365970056 +-1.7790727868012899 +-1.1807299123769641 +-1.5733243534291632 +-1.5733243534291632 +-2.0736148819807134 +-2.7320933443739506 +-3.0159723504710954 +-2.388136039051406 +-2.046015277281758 +-1.7104417840129569 +-1.7818844381631136 +-1.1169336514821764 +-0.813529837659775 +-1.4558009870074227 +-0.5092481216418041 +-0.22182511384138914 +-1.119780609686997 +-0.810433919795698 +-0.9138327710095556 +-0.03257589726027177 +0.8830885210543603 +1.5339849613832177 +0.8520547105645013 +1.3674538564617036 +1.091329973255458 +0.3835347460086147 +0.8596931080219421 +-0.02496403474536968 +0.6054270885385717 +0.7062847719799663 +0.23003613553627023 +-0.2641759559951702 +0.10426833535217006 +0.9744085849750501 +0.9744085849750501 +0.7076161924084882 +0.865464410409032 +1.6988664779382492 +2.5102451245667403 +3.4223035775133237 +4.2403690720070015 +3.710101570790628 +3.710101570790628 +3.710101570790628 +4.066146375409776 +4.689737493497295 +4.2510997687487535 +4.777743891675417 +4.777743891675417 +4.777743891675417 +5.223717590058648 +5.701809167089635 +5.151629885788461 +4.445180435591887 +4.930346917219213 +4.557265314777615 +4.665415496667608 +4.665415496667608 +5.073384292787352 +5.384983323673238 +4.723789967885514 +4.783480128814277 +4.783480128814277 +3.9641452823440573 +3.7886427902953526 +3.7886427902953526 +3.75315399407409 +3.232205636921061 +3.565328443316001 +3.215449563146266 +2.445375647578729 +2.1327278968754184 +2.909572997444782 +3.3766691664754473 +2.6104713607205543 +2.6104713607205543 +1.9101577049552767 +2.007487594246873 +1.409361277077057 +1.8641557726969502 +1.319555001718025 +2.0483269657044754 +2.1113295574459343 +2.721076381277622 +1.8273247577873324 +1.0460030757524252 +1.0460030757524252 +0.9442117924030132 +1.0787058287896487 +1.0451165578050894 +0.7947342492064905 +-0.0810207278124585 +0.3009281478611433 +-0.6089697101584929 +0.2185939023401321 +0.8002544919526985 +0.6466649789197341 +1.1243546875718393 +0.6894271121775241 +1.2308611781989631 +1.3182869990791743 +1.929059820079301 +1.6061061464374151 +1.6061061464374151 +0.7451479786763142 +0.5357541094928581 +-0.10493105100803579 +0.29916932224292825 +-0.5332390709336999 +0.01458616783210298 +-0.13817079687134193 +-0.21696675714095337 +-0.8526460512194612 +-0.8526460512194612 +-1.3793377905644295 +-0.39915017431972255 +-0.39915017431972255 +-0.24196652620185755 +-0.009177533116738523 +-0.6480168409183609 +-0.7252998337793283 +0.06491712553734341 +-0.24708613023404036 +-0.009089948632877931 +0.13243143937335367 +0.4947980266012426 +-0.43489443574446485 +-0.14400975706123464 +-0.5005040871104273 +-0.5005040871104273 +-1.122448052812636 +-0.26225870653091876 +-0.18666494173861503 +0.4893013620868918 +0.4893013620868918 +-0.13464105578691998 +-0.5326705365012961 +-1.4799520762689546 +-2.367664095355641 +-3.304996180888729 +-3.2216654727018206 +-3.7222930328444113 +-3.498563934788778 +-3.4594323246603382 +-3.5010262237726537 +-2.976081050797211 +-2.064111859413122 +-1.2366461878853963 +-1.7873455472763498 +-2.0883187754612775 +-2.152196056483984 +-3.0661310975044165 +-3.9093552890575483 +-3.5918251831831003 +-3.5560401937490873 +-3.1225292139663456 +-3.1225292139663456 +-2.512831025606274 +-3.045628505855566 +-2.5487980802098194 +-2.224445946457086 +-3.08340165331521 +-3.6258276170702675 +-3.0579659530743966 +-2.754363670269252 +-1.995334017623269 +-2.198910248252729 +-1.6862369388240521 +-1.055075392654134 +-1.500760477380243 +-1.4304891172995462 +-2.1276254265028527 +-2.4533200990891846 +-2.4533200990891846 +-1.483347148565026 +-2.4396113531590142 +-2.073081800062508 +-2.239484130109348 +-1.4468147692431266 +-0.49685383588055343 +0.09469021382133747 +-0.15675681966739174 +-1.0329118361191734 +-1.6856754615320615 +-1.9715992445250512 +-2.4569391813457138 +-3.211650280173676 +-3.4762818835313234 +-3.802605895860886 +-4.518133443245777 +-4.521118380257854 +-5.401095857790142 +-5.401095857790142 +-4.751052592791725 +-3.876010508576848 +-3.540431390853487 +-4.36600914731011 +-4.271953385090059 +-3.3180375469322785 +-2.8198691526582915 +-2.557896241382811 +-1.6861022056501798 +-2.230728801991313 +-1.31686169038295 +-1.4659077342459432 +-1.7773491568422908 +-1.0877850126699733 +-0.6682473914692315 +0.29230518682420414 +-0.6487292051472848 +0.2190709130391053 +0.6601549053985569 +1.2523177948617041 +0.7734820171375777 +1.0110461414650613 +1.8157483017883802 +1.8157483017883802 +1.2405459529983194 +0.9290811352929648 +0.36999704899048724 +1.2018217156536908 +0.5430106612950374 +1.3649509120013352 +0.5916782216083671 +1.5871869033338455 +1.6368117813024223 +0.8536864029630726 +-0.06359141096180565 +-0.39392822552991824 +-0.7971306888020979 +-0.8408439389752181 +-0.19375827635223575 +0.4414677708052045 +0.6466800723889344 +1.01505796060217 +1.01505796060217 +0.1516373756816911 +0.85022758717774 +1.3987578777257665 +1.7645395302608597 +2.539421561746213 +2.3368809964274138 +2.53238751388567 +2.53238751388567 +1.7069306800581163 +1.249091653808239 +1.2243835210647394 +1.7181776253584735 +1.5356791207480853 +0.8516924322896267 +1.6361811932044399 +2.418784874807391 +2.1289144858029596 +2.4238195739815716 +2.15621643826991 +1.9404150031817182 +2.922763059062 +2.8763493388159898 +2.126137573561868 +2.5812882450225763 +2.547891984682944 +2.0345171293698945 +1.7104425526057514 +2.094402106421701 +1.897560284804332 +2.1421729725469563 +2.6226707175540174 +3.439985334797315 +3.597076400920302 +4.14226226742406 +4.683645317622437 +5.476253715406239 +6.300034121894652 +6.300034121894652 +6.20435687629823 +6.20435687629823 +5.5748979212166185 +5.901184731115417 +6.105766629150215 +5.944191216437772 +5.982175958035674 +5.10192388478247 +4.159558230915165 +3.5139113875837005 +3.8473755291786125 +3.595585217529581 +3.7715163671340215 +4.112533272064097 +4.112533272064097 +4.071109172756596 +3.8871916265691033 +3.8871916265691033 +4.509908562996759 +4.686940369235041 +4.838218249853654 +4.951685658970287 +4.951685658970287 +4.951685658970287 +4.474696743433657 +3.7802595762013205 +2.8328617982574 +3.5947067561405643 +3.5947067561405643 +3.906121196746325 +3.555501966845705 +3.7149644386823137 +3.1184644213147763 +3.4775087694813633 +2.857331135752382 +2.4400031095971886 +1.861590861316775 +1.158538416176629 +1.7961191327824253 +1.3996794893503846 +0.5914044798385145 +1.2629754429540616 +0.8924714999822138 +1.4737519479081138 +1.9411303013475634 +1.707548694330972 +0.9802725240917411 +0.9802725240917411 +0.1309895206846734 +0.8333669875180261 +1.6176794274450932 +1.191451010968752 +0.5840942408484482 +0.6265625244414799 +0.36234557973149306 +-0.08526643714827586 +0.6990306682386076 +1.273617337237264 +1.273617337237264 +0.4352703006521257 +-0.006149128179727348 +0.7107665927880787 +0.43806728765298253 +1.147445257973202 +0.19239798023928278 +-0.18224323499096717 +-0.3921274270740931 +-0.7787343432116661 +-0.4896966902056078 +-0.8314858323158054 +-0.651375546457275 +-0.21866972064323398 +-0.48113396290007227 +-1.3149616036612821 +-1.441988859268942 +-1.149142730880531 +-1.1024487728179215 +-1.2826078820811118 +-0.536411940257584 +0.19790105493347343 +-0.3849883532948024 +0.25861757758242043 +1.1332725606160863 +0.27989272340177784 +-0.7024000834649415 +-0.21338847004105577 +0.08583345328488212 +0.8674778168574437 +0.8563033801387318 +1.1927607754543157 +1.3263175998511585 +0.8813829067163687 +0.5949884221990756 +1.2671587579234767 +1.9551133830881302 +2.585448854642631 +2.052181702283003 +1.3921723191819335 +0.42413285102404297 +-0.2564019579467818 +0.4529870594674503 +-0.07947024967369942 +0.6125607899988927 +0.7561367088298685 +1.3798435747810127 +1.4744278176800778 +0.5306116039427717 +1.2870556835897664 +0.34804571275447027 +0.3295885215368547 +0.9108492352070839 +0.9338009045148222 +1.4407215454430777 +1.669819665637745 +1.3672120392309584 +2.357164158325977 +2.2645211461070267 +1.2769438056304205 +1.5784653816920666 +1.4270236386888682 +1.8649355120396758 +2.3252577648451638 +1.9814182677048704 +2.552657400872918 +2.5934087751474735 +2.968236608225392 +2.3949367489571975 +1.919277210558414 +1.0482454604942948 +1.1109854660875396 +1.007552621016588 +0.17917081998369278 +-0.6817501971986641 +-0.7421358441885103 +-1.552722431035762 +-0.6086939312905306 +-0.3341439381518818 +0.05361064750900146 +-0.7363687172677831 +-1.1964942260811808 +-1.602626493106286 +-2.0634514009425633 +-2.4896234912861166 +-1.8137748747593467 +-1.5139214791412612 +-1.0540646416239112 +-0.2517271761025168 +-0.5040606326030238 +-1.0382757984123976 +-0.1246606790961402 +-0.095008883695745 +-0.5366036903816104 +-1.3947388410304362 +-0.8999064166148318 +-1.1544796115328704 +-0.3030822734772447 +0.28579267852936896 +-0.5680834078125243 +-0.2611924670793455 +-0.5330638353602836 +-0.24162651668308077 +-0.6450920004318808 +-0.44383492777545386 +-0.9334138537478635 +-1.0210347059199432 +-0.9881959291592233 +-1.6214182427241577 +-1.865224227131561 +-2.720293177022287 +-2.186224154871593 +-1.6753219506799943 +-1.6753219506799943 +-1.4037093638944675 +-1.499538867152372 +-1.0697761399859724 +-1.7650937710691403 +-1.277988603871955 +-1.0776514104316515 +-0.9852994285141037 +-1.0636976122579895 +-0.8506391017680284 +-1.2322018209047174 +-0.4534470198683678 +-0.29975907329801177 +-0.9806147121611726 +-0.6691101308916039 +-1.52057813522438 +-1.4257797162642794 +-0.5109829289933119 +-0.7602089356388048 +-1.0944920208023659 +-0.5937801092112049 +-0.5862918854112027 +-0.9323471939982321 +-0.2007311831305384 +-0.2009291736330583 +0.04674372266795812 +0.531702585228768 +1.2098565623325772 +0.23411990986971243 +0.07727569541756873 +0.9026744661332441 +0.7523859386403318 +1.3461261722512827 +1.355848265113999 +1.0610959177293808 +1.5095825502289277 +1.138139611774613 +1.8817011978204505 +1.5613195530764088 +2.362936306931327 +3.2079144503383983 +3.938264825930119 +2.9403278624538673 +2.7871720690417554 +2.222766625730897 +2.33492541762471 +1.793845875103516 +1.609814306734044 +1.431271527763602 +1.6489785575595919 +2.577446285475504 +2.1632528953438728 +1.2311405632682473 +0.41883149878011894 +-0.33308417679828883 +-0.052007952867392016 +0.7248244189113591 +0.5570692456929026 +1.3371347286718867 +1.135545249951456 +0.6182076526220286 +-0.0637060957101383 +-0.4382576911602726 +0.5132946589558899 +-0.26486456592307206 +-0.35941201326666805 +-0.04369256929331744 +-0.4862914929475063 +-0.42361720747202203 +-1.1144029812435297 +-1.0106007662815666 +-1.0106007662815666 +-1.1651151820798242 +-0.44161136424353087 +-1.2185112600534038 +-0.40542662939733387 +0.24911929572871627 +-0.5128362453873385 +0.28672712991630633 +0.007202953390343825 +-0.6427404094241423 +-1.0099267347875813 +-0.27222611383454454 +-0.9294257200912304 +-1.1742377069965313 +-0.6222944907476711 +-0.03166259281047634 +0.3781614983211887 +0.7610055120969037 +1.715544133459346 +1.2137067971879576 +1.9988448639951453 +2.515041835193611 +3.317094234858744 +3.3303495021845313 +3.803816801181539 +3.9562988151487675 +4.109550788840037 +3.3286068499380925 +3.6512433441592127 +3.403234087889975 +4.255739943879963 +4.773748248386408 +4.036447948705677 +4.036447948705677 +3.972262056494994 +3.972262056494994 +4.150942844247159 +3.7504144610386727 +4.366784640853563 +3.5020365558585977 +4.173242221966413 +3.6302624819725393 +2.669823661842702 +3.222657722935307 +2.8983513912936876 +3.0525609199464494 +2.806431445631927 +3.2877036503235777 +4.24612276949092 +4.621541832997302 +4.3496426598617415 +4.3496426598617415 +4.107416422168196 +4.54307195419503 +4.059146208838332 +3.657507750560401 +3.1033550094066387 +4.021170980747081 +3.5092163807390704 +3.234580457538362 +2.6520940329370353 +3.1300185630288926 +2.6337551217097044 +2.6337551217097044 +1.6943106021027168 +1.6943106021027168 +1.9152694915009962 +0.9746714147705222 +0.49015804789604867 +-0.11435424429747865 +-0.19951839391142756 +0.09486732312630486 +0.6369175208075133 +1.3081541971917166 +1.7455227825811004 +1.6241224299835286 +1.3636795444196679 +1.8314570137526172 +2.0640360002291636 +1.1442659250054803 +2.0230644221246004 +1.8618496877493889 +1.6543110064194773 +1.1028367329122448 +0.307333437118567 +0.07987616359016314 +1.050618381185973 +0.18144311279299563 +0.004522090945496937 +-0.2662101995699533 +-0.8388778886205788 +-0.8388778886205788 +-0.03138446919158033 +-0.730105308877061 +-1.7066236187478603 +-2.1340222725237514 +-1.6043983343778032 +-2.5111298454864217 +-3.234534439410738 +-3.405675069922403 +-2.5019368291807713 +-2.230907202405815 +-1.5816815092453498 +-1.231607024073509 +-1.574381068478742 +-2.0585387413336136 +-1.0980285646303205 +-2.007464512867581 +-2.104027391642976 +-1.9916544762171446 +-1.9916544762171446 +-2.765962684972506 +-1.794578619302215 +-1.0919941155051869 +-0.8597592571789681 +-0.7778414301386425 +-0.1273184109498977 +-1.067192327530447 +-1.4784216982018026 +-2.1932874312429727 +-1.6578642358533555 +-1.6578642358533555 +-1.9298805385682032 +-1.0647251264826645 +-1.3289315510676531 +-1.170787137415276 +-1.8113676235577743 +-1.019242507986925 +-0.632372119175151 +-0.43158252411270137 +-0.631080560153983 +-0.22487612395849121 +-0.2755018982204036 +-0.8049420192158667 +-0.8049420192158667 +-0.9446135493794118 +-1.4839439246686261 +-0.947614212136449 +-0.46494179370203703 +-0.5303917444560838 +-0.6418619035923232 +-1.0457933972694402 +-0.7854226593400544 +-0.8215070208713527 +0.09781718805623985 +1.0117166758456704 +0.7504628415435294 +0.9979340943298461 +0.013935178590558484 +-0.37192182769490567 +-1.0711320220819442 +-0.9734057855752303 +-1.685757164823974 +-1.162007157646469 +-2.1388556446714 +-1.6356383428534071 +-2.3542557175325767 +-2.2953015373947903 +-3.2190028826023154 +-3.037488918776936 +-3.798821983588783 +-3.9692098318013707 +-3.212013185982224 +-2.9474262305090226 +-2.1472866816049283 +-2.9847915854111484 +-2.0779945047390704 +-2.90573595511522 +-3.1965896060966816 +-2.537402231503405 +-2.4666216660539617 +-2.4109551716955755 +-2.0007332469767736 +-1.314290157603252 +-0.8834873826594656 +-0.1387223365104031 +-0.08177255304498376 +-0.43430867778012694 +-0.667955463538112 +-1.4580639624975862 +-2.0465299700463975 +-2.589451744469924 +-3.1422791671965964 +-2.5104438918271845 +-3.1791165677737663 +-3.4315669670715927 +-3.0386065378247 +-3.838109461977355 +-3.838109461977355 +-4.523034061770303 +-3.6835165167270283 +-3.007872814054724 +-3.1373376761020486 +-3.0529376006804227 +-3.162178680018405 +-2.6188601291956184 +-2.7937816455529476 +-2.098508505192756 +-1.5136577640991227 +-1.0608441826345785 +-0.44519781060596264 +-0.5353236673195422 +-0.5353236673195422 +-0.5353236673195422 +-0.9475029747735626 +-1.5268641992147638 +-0.6299262118341067 +-0.81706863395157725 +-0.9057541955885753 +-1.4675699576596066 +-2.043519328844339 +-2.369551137051277 +-1.4384786893882704 +-0.5484965319124036 +-0.6490287824812059 +-1.2748501214269798 +-0.4150491333299131 +-1.022517000580237 +-0.9986661226841014 +-1.4964721736965352 +-1.4940750747498444 +-1.3458831371674114 +-1.7069151261527442 +-1.127250476798824 +-1.3901741449880678 +-2.1301132602174113 +-1.7767702486430097 +-1.2621763579651786 +-0.9986675191839653 +-1.4803700466248113 +-2.001356853389183 +-2.1944408890014855 +-1.511376060387968 +-1.1845214174678909 +-1.983624681731751 +-2.6112707988644104 +-2.6112707988644104 +-2.0266086168450337 +-2.0266086168450337 +-1.6067790897483032 +-1.9892490673582697 +-2.6870972920333407 +-3.5312151908852965 +-4.184972557764897 +-3.8561939452685747 +-3.880160006692107 +-3.141835752217488 +-3.141835752217488 +-3.141835752217488 +-4.010088949762022 +-4.779230795413368 +-5.194327255266644 +-5.194327255266644 +-5.479175900075798 +-5.946333532863104 +-5.362956263418285 +-4.772547623059611 +-4.816607487251917 +-4.201918068559351 +-4.474800582086023 +-5.350768294663304 +-5.415533854846595 +-5.415533854846595 +-4.699606379842368 +-4.516704261514788 +-4.516704261514788 +-4.95910079892321 +-5.49457599610748 +-4.82774946193029 +-4.82774946193029 +-4.663571332488555 +-5.459555679304012 +-4.598610601182206 +-5.09602133266469 +-4.313753466544064 +-3.440069887846224 +-4.361078140165099 +-4.5034394440956165 +-4.482692664958224 +-4.722052793661892 +-4.722052793661892 +-3.907929875217025 +-3.907929875217025 +-4.375874438419661 +-3.838392218168255 +-3.821267433412378 +-3.821267433412378 +-4.354483157565719 +-3.979158115807657 +-3.979158115807657 +-3.8243953157829003 +-4.225679018742815 +-5.044468252252262 +-5.663004049906723 +-5.0855699434882276 +-4.103959285851023 +-4.72247148942882 +-5.548360965117156 +-6.25221161818838 +-6.25221161818838 +-6.623976367800987 +-5.7247677344473935 +-5.7247677344473935 +-5.0998985463566715 +-5.0998985463566715 +-5.0998985463566715 +-4.6719144397916335 +-5.009965586942469 +-4.932627148014221 +-4.449587436438955 +-4.449587436438955 +-4.340351917382326 +-5.030295007037958 +-4.890347649248742 +-4.794059708220922 +-5.284924938599865 +-5.6680148304970155 +-5.039526919037813 +-4.391985229514869 +-5.257661152731613 +-4.604697369388333 +-4.768971829487128 +-5.05677778435507 +-5.05677778435507 +-5.915459384350975 +-5.685641464176049 +-5.928148832973307 +-6.340957228562546 +-6.472962148515693 +-6.8925306840903575 +-7.095957489724881 +-7.095957489724881 +-6.415899494188548 +-5.430228555163474 +-4.454967820019723 +-3.8871954391790196 +-3.3981481008106242 +-2.4773869858065565 +-2.177769319843268 +-2.599604900285851 +-2.732129730414825 +-3.117157684424829 +-2.8920074119962074 +-2.7029747278296004 +-2.6886984963210177 +-3.6520512519129573 +-4.6099486663442315 +-3.771528888474422 +-4.651407328249238 +-5.495894133781412 +-5.495894133781412 +-5.403515526631344 +-5.87450753129725 +-5.387303661483072 +-5.387303661483072 +-5.8208100107416225 +-6.065425728041731 +-6.065425728041731 +-5.30992156499604 +-4.929473221268712 +-5.009088639956899 +-4.124293751096502 +-3.8190538064835393 +-3.508040090976632 +-3.94398431995926 +-4.644312987738735 +-5.1500540567516575 +-5.400621146173492 +-5.743868470129532 +-5.743868470129532 +-5.582423167971122 +-6.295511890287808 +-6.167786106576315 +-5.50384750840834 +-5.50384750840834 +-4.757593163721409 +-4.36627635268991 +-4.592861223346388 +-4.24119522728307 +-5.178929378866638 +-4.925480965653032 +-4.73833161971786 +-4.141595658512692 +-5.1163244989640635 +-4.890665224319353 +-4.460899605822664 +-4.460899605822664 +-4.444079974185229 +-3.6628135551188588 +-3.8916622781212578 +-3.795535401887986 +-4.357324638296976 +-4.357324638296976 +-5.025357447536644 +-5.756296830956881 +-5.637199271552721 +-5.637199271552721 +-5.657337026058607 +-6.639828265670258 +-7.220873692801675 +-6.338976809267712 +-5.944252284318715 +-5.4342383740816125 +-5.085246524528839 +-5.101144686624578 +-4.110055199546563 +-4.582550686418377 +-5.541346337015066 +-5.541346337015066 +-5.060216862654278 +-4.155531744189512 +-3.4898812802538877 +-4.475861986335561 +-3.5143368144548623 +-3.261725756557357 +-3.372056407761828 +-3.0429271492284324 +-3.696157942644694 +-4.114467769575474 +-3.4548180728426505 +-3.422806455834733 +-3.422806455834733 +-4.099003356284803 +-3.538318917614191 +-4.239940054339135 +-3.6734946153194277 +-4.628509322718953 +-3.6310085834432084 +-2.706282785343043 +-2.001806687905658 +-1.2532494574197057 +-1.195708739580646 +-1.9980893504455357 +-2.132962724373041 +-1.279891543160628 +-1.4519185571554583 +-0.9466134591664752 +-1.432419427792171 +-1.1458485776037939 +-1.9514813061220382 +-2.0424012774839624 +-2.4221520498557583 +-2.6110597424014683 +-2.8904677184079084 +-2.0624294820787545 +-1.4808395042174094 +-0.788861761431142 +-0.08583185710722807 +0.676783864469735 +-0.322184076204143 +-0.3989206512383 +-0.3989206512383 +0.19573606272866606 +1.0310575661389585 +0.3281080608904401 +-0.4968137277835887 +-1.1549862603404932 +-0.2409152273701023 +-1.0281600162952635 +-1.324348451649798 +-1.2752535712534403 +-0.8074315210322527 +-1.003352593289491 +-0.7813574360339459 +-0.839564769065254 +-1.5940094811660819 +-1.9364450357138967 +-1.775218511409051 +-1.5338930992166606 +-2.3325531732016502 +-3.215388208782992 +-3.7869607203117686 +-4.077705506655993 +-3.383317588521125 +-3.2675436928629926 +-2.9985057098491676 +-2.2318831296249106 +-2.4387935174867517 +-1.7292667154454384 +-1.0125084387176342 +-1.2426798958831333 +-1.2976727898547717 +-0.5015008012687876 +0.24471082941621836 +0.7662465765920401 +0.9465600637124258 +1.4355500778375048 +0.996352446949203 +0.996352446949203 +0.7258643188987599 +1.1975829282837296 +1.3189252634529445 +1.3189252634529445 +1.282761185214178 +2.1787879686440497 +2.317870352953554 +1.6048041772836712 +2.0516926465473064 +2.578466381412893 +3.545429637556432 +2.943387348802333 +3.749413393885689 +4.092977140364976 +3.156615909287589 +3.156615909287589 +3.431105367424153 +3.6510227478471666 +2.8546996889572185 +2.2006250736647655 +2.4690016695778594 +1.784511052118869 +2.0417360699621856 +1.9373108299626196 +1.2248351525231227 +0.7828751105340658 +0.5512210245110696 +0.5506169911951043 +-0.1316035222481241 +-0.9133687119010611 +-0.5016850192758876 +-0.5032532727868315 +-0.5059827500262281 +-0.4994693506012736 +-0.406654966549611 +-0.7853922922964074 +-0.17357005686954086 +-0.8029035881070006 +-0.8029035881070006 +-0.8092256500600276 +-0.21374252217976764 +-0.2873840942358832 +-0.3730466738286343 +-0.8462740513061842 +-0.6306907914577689 +-0.07402068700306619 +-0.9060227766977866 +-1.780785835812892 +-1.9732234265913626 +-1.5438524697070442 +-2.357430778957206 +-2.640142414854355 +-3.073779472281808 +-3.0531529942240656 +-2.1231245023902128 +-2.6785891912778212 +-3.2914343660074006 +-2.7729334002321266 +-3.3247681481512164 +-2.9632909760766815 +-2.187667273488997 +-2.4276693115488968 +-2.527458969070869 +-3.5271136019267484 +-3.5271136019267484 +-2.894492278796033 +-2.180807849445167 +-1.9938098335568928 +-1.9938098335568928 +-1.7598696557659927 +-0.9805958366245544 +-0.9805958366245544 +-1.3823176934392705 +-1.0635712604171355 +-0.9324764745926737 +-0.8609974731323689 +-1.6328257599724718 +-1.9196269557690937 +-1.2174423303627233 +-0.8228077509200051 +-0.30362125204490975 +0.601887395057092 +1.05057806487331 +0.8482778641326879 +1.2005163317967371 +1.6821622010231658 +0.9196272191257142 +0.5977203663354592 +0.7225247444189039 +0.16021279316401638 +-0.3207541851227549 +0.22073155286124058 +-0.25634947420007637 +-0.4038818758393392 +0.07326448746391057 +0.6873552922146295 +0.8385945404873256 +0.037274455188174516 +0.569055721463197 +-0.2886201377312052 +0.5139774042893157 +0.14381906796092736 +-0.671222763961059 +-0.45020328690473976 +0.39574284931692316 +-0.4502873136632729 +-0.6854826054793743 +-0.21026930520997467 +-1.0660789428331727 +-0.9876035516646353 +-0.639708753161377 +0.0346639845682144 +-0.18379589601904522 +-0.27364105047757925 +-0.6478200979179226 +-0.45385172823356756 +0.15467393996601297 +-0.316501684469467 +0.13323634454668376 +0.02882873372109518 +0.8730327061925548 +1.04992409339541 +1.04992409339541 +1.890105784236523 +1.156509792426476 +1.0956573207230251 +1.6604930346460813 +1.489450834523403 +1.0615602488426323 +0.49602650427643646 +-0.4369488020895931 +-1.4219592684519875 +-0.719420734734249 +-1.6262881661800805 +-1.0019684587179278 +-1.2354993723976553 +-1.6877867698612334 +-1.049838325907327 +-1.6965094301888148 +-1.6821341022404257 +-2.271873955270241 +-1.4294175372685078 +-1.2442344873995017 +-1.4702315167385134 +-1.7934813740394162 +-1.4080786545093484 +-1.9455658151701674 +-1.893877125949659 +-1.0119330504080224 +-0.23129946324404105 +-0.6221743243379226 +0.31605244340389016 +0.2104017010766679 +1.1978798234740928 +1.2307375648307541 +0.871012450579192 +1.2724992742798982 +0.8668067211243463 +1.5268787799213 +1.0060091335020953 +1.6535368587074093 +0.8437975206753909 +1.1969546671831353 +1.6980755643316847 +0.7491465507968591 +1.0855704386544387 +1.7998903730414377 +2.1233107227287897 +1.2759832775824658 +0.6567173292752664 +0.04597900178628622 +0.19183108671397608 +-0.18830110384052723 +0.24857387056470748 +-0.7102194274492112 +-1.400482930428351 +-1.808724411371489 +-1.7733840803213026 +-2.4373622101759915 +-2.7676393224634963 +-2.7676393224634963 +-2.3163442388229867 +-1.9137773864334546 +-2.1266024270111386 +-1.9039669066297886 +-1.586240768896284 +-1.1406946445490105 +-0.5531616175583978 +-1.103054159354633 +-1.6175643300624527 +-1.6175643300624527 +-2.1266186329263705 +-1.348072177945182 +-1.1631252517490303 +-1.0762756271758547 +-1.376057102282099 +-2.094993842278966 +-1.7044273634220664 +-1.4408730143245119 +-1.6381893883373966 +-2.4202135502312236 +-2.86721038670977 +-2.591231218879562 +-2.9693397722035786 +-3.8109062238212914 +-3.8930345948228693 +-3.8930345948228693 +-4.0147993268137405 +-3.1914677300279166 +-3.2343100499057087 +-2.6693702257296623 +-1.6963166523747184 +-1.0415784689353818 +-1.0415784689353818 +-0.8189171925243128 +-0.9675232280218325 +-0.21832386376783297 +-0.24142632547988274 +0.416483730852508 +1.3299856050985353 +1.7822332545967476 +1.147414057686347 +0.2519364638314967 +-0.32208463118174646 +0.2268467549462001 +1.045941295167154 +1.9504113676253716 +2.1201814107194905 +1.1737821699539173 +0.5430043634515287 +0.38754483095749126 +1.1592054493658255 +0.6608243304218101 +0.2560172980755402 +-0.6633786974886338 +-1.3562254073217141 +-0.4045906964231718 +-0.48562287977757623 +-0.5021636436453223 +-1.4219199245172276 +-1.8230107108507898 +-1.3818321917857253 +-1.4721153126895548 +-2.3207173882956793 +-1.4976325955447551 +-1.470120590501389 +-2.2611508532895526 +-1.9250197822486703 +-1.5893947658847183 +-2.350948008301126 +-2.350948008301126 +-2.5538051084382847 +-2.5538051084382847 +-3.041495547605097 +-2.698027655280388 +-2.7021839038853663 +-3.6763145824843377 +-4.256604687084252 +-4.3203780050957175 +-4.3203780050957175 +-5.309823235525795 +-4.364850965006588 +-5.260909426940691 +-4.403346710552956 +-4.395515009080755 +-4.510366287398141 +-4.76133912113615 +-3.7963995591485618 +-3.743454023366347 +-3.076259281242054 +-3.076259281242054 +-2.7204859013896767 +-2.2377767738204115 +-2.912871896395907 +-3.6280697157710757 +-4.120431784208953 +-4.424945003978813 +-4.96824211347027 +-4.250803349922428 +-3.265598813701366 +-3.1794451163564315 +-3.1001737439499486 +-2.6357830539507634 +-2.4609813430466505 +-1.9575842012118825 +-1.2765722976426215 +-0.5986057365600113 +-1.3246211260075618 +-1.3785338521884158 +-2.1538691481757946 +-1.3588339254268855 +-0.5331797846017845 +-1.124195437841963 +-2.0233386872840127 +-1.4892278316899594 +-1.5176882439208703 +-2.1647670607640057 +-1.2944281582351407 +-1.9083374922532679 +-1.8608644734776218 +-1.4540309528662427 +-2.2608733758999096 +-2.432895862980958 +-2.8274705006624403 +-2.4846993194068796 +-2.349641854456361 +-1.6388028129756524 +-1.4032753768425206 +-0.5675661285257447 +-1.3471208661666028 +-0.8548717517498954 +-0.257185464343602 +-0.36981587954225315 +-0.4322088318625168 +-1.107930578716417 +-0.4290328089991138 +-0.6690581674149058 +-0.559339742559504 +0.20113288275617525 +0.782035672386375 +1.3061896277358862 +1.5745312148077015 +2.3078329210142066 +1.4860448267149193 +1.4318738353722877 +0.6111451850645115 +-0.08123234296357351 +-0.06833613591791221 +0.5377233226158733 +0.19481460160484698 +-0.7402083614401312 +-1.5607002787985582 +-0.9663803494811374 +-0.8100826414964939 +-0.15407974686133974 +0.09485360892457484 +0.15701397240698878 +-0.567386856387526 +-1.408234757424094 +-0.8418823147175105 +-0.22440433417505123 +-0.8331001866433769 +-0.9286473860210417 +-0.6915705149482269 +-0.8156561020666897 +-1.086601936957611 +-0.145276965584497 +-0.5085314210437718 +-0.05363754646759211 +0.8411298034969287 +0.4243302688313553 +-0.5582066695189092 +0.052696916177610076 +-0.632827601120779 +0.33956203326289325 +0.6210818088549006 +1.1329328081318368 +1.1329328081318368 +0.6237422562539279 +1.0592402313193563 +0.3343664658995291 +0.3437529836986193 +-0.5234859199859156 +-1.3573901730666813 +-0.46253471066589036 +-0.09128350426028331 +-0.09955996315777138 +-0.4000200648504404 +-0.3392376299051105 +-0.303020305403092 +0.5981989490289694 +1.1127188370315708 +0.9685736842057969 +-0.01510261255968659 +-0.8055483295510587 +-0.8055483295510587 +-1.5256463601856654 +-1.9662622834637378 +-1.299403572953284 +-1.013369952505292 +-0.6258229421004824 +0.07984473631853861 +0.7787084287812627 +-0.21216682310810664 +-0.1566452097179234 +-0.8533568559490701 +-0.5837079010467223 +-0.3831536395033244 +-0.32322804570211994 +-0.20803861571110316 +-0.1368892277797129 +-0.7894121646288297 +-1.0439732229160237 +-0.5085990635055715 +-0.6134632065902529 +-1.144210172772644 +-0.47168255498011047 +-0.5711737616776232 +-0.8216020282043666 +0.07060943940441944 +-0.6101860658613334 +-0.379945117716731 +-0.7170346239491127 +-0.4069679198128605 +0.5223470174579511 +1.0971200092524596 +1.0971200092524596 +0.8905701569329968 +0.8905701569329968 +0.7886835966840049 +0.5098037286078044 +0.9897547627366429 +0.557398539416418 +0.07402736699429824 +-0.5814046038357948 +-0.012093060338277062 +0.4467145912865632 +0.8462218093970094 +0.12588170994752568 +-0.4452895393736661 +0.0756845398283007 +-0.02009293404550383 +-0.24152879762299773 +0.29661348264314025 +1.2081758387097894 +1.8458283625346898 +1.5502324288870466 +0.8046954438180018 +1.2611118011207436 +1.2611118011207436 +0.49717310877745735 +0.27041301690668174 +0.8556015077233682 +0.06103268075871349 +0.0446043539415959 +0.26002625490105924 +0.0523101283243298 +0.2125544046922051 +0.9468109684398597 +0.36680279414736605 +0.03107709723348928 +-0.06295625469127042 +-0.3909260111500974 +-0.8977554302735031 +-0.5271226326238847 +-0.2046254940948622 +0.7064838001338931 +1.5306634265674335 +0.7292299898892904 +-0.25282030131224964 +-0.9289163527631434 +-1.0545597561716256 +-0.668677709824145 +-0.1180311021245517 +0.8575589369452121 +1.4833858501672408 +2.2950961939826326 +2.75226963138776 +3.239089169321315 +4.0899811460623905 +3.8596769483356637 +3.7776974863730084 +4.741540200308624 +4.733797695882562 +5.231289262054317 +5.023010167337167 +4.298120972443011 +3.7026462391095873 +3.603026815506385 +4.17161900244633 +4.376293837615777 +4.857171697037732 +4.857171697037732 +4.7753104808048334 +5.758491010231013 +6.467219641384136 +6.467219641384136 +6.940574800489204 +6.157024618010277 +5.799698396404608 +6.09089234328733 +6.608340687707106 +7.485094733951821 +7.485094733951821 +7.094782192400164 +7.094782192400164 +7.858152735256736 +7.486638754222645 +7.686740559235162 +7.782447350260647 +7.61310312754312 +7.220855934289416 +6.304120945588398 +5.691938563365285 +5.364855050639206 +5.364855050639206 +4.852687159996188 +5.607706008594637 +6.206051429645761 +5.733569257989918 +4.760058553886675 +4.680450859847119 +5.569696839888903 +5.439844398842377 +5.1940489772583565 +5.1940489772583565 +4.444868037044215 +4.069782521791721 +3.3714014436722106 +3.2747933527106956 +3.263385609862496 +2.9496989914031606 +3.8245457482669853 +3.1324019628092126 +2.6139055435429386 +2.5841727314334113 +1.8101710442760683 +1.8101710442760683 +1.8101710442760683 +1.3395417623240045 +1.8279885307384052 +2.691392505475886 +3.3881657268574146 +3.5000077918084695 +3.5000077918084695 +4.456555424526173 +4.456555424526173 +3.553285565251044 +4.122419386735826 +3.1983672705914765 +2.3838968128178744 +1.852095906751647 +2.1107991212031783 +1.1905455502946054 +0.9036204993993543 +1.6014127928637114 +1.6014127928637114 +0.7507646698893593 +1.330434215796763 +1.3098827781526277 +1.3112946066880027 +1.0449724315393798 +1.3127356123645932 +2.1263586148139875 +2.8093105568750536 +2.9764304165066253 +3.8686542371102126 +2.957819390073163 +3.313577255818292 +3.313577255818292 +2.533304632538745 +2.888444461748196 +2.8078270121675617 +1.8263440690660406 +2.3389283161540844 +3.262313495801783 +2.7618934086578286 +3.3135955627152276 +3.5272499199058323 +3.523907017430911 +4.257827171665464 +4.310267779758574 +3.6469781319367494 +3.0388930916388617 +2.462079850321287 +3.2354098615091162 +4.204868719463017 +4.746608749957149 +4.746608749957149 +4.746608749957149 +4.181609503608282 +3.610691074416321 +3.6049770125246754 +3.393894253979236 +2.616419402355622 +1.9673668286948571 +2.3611461219318226 +2.3425787785369687 +2.4702795478432167 +2.0394252875424446 +2.1670113622833416 +2.07301099572946 +1.1590233211748324 +1.1412253386523052 +1.5576734048684995 +1.1376464723278823 +0.5327252499604664 +0.04901827996894992 +-0.4031664951093421 +0.2371623856270768 +0.9854335755017662 +0.5413436886624677 +0.951210082286792 +0.25814874883351513 +-0.25252308037379756 +-0.2066376335231258 +-0.7161980270160725 +-0.5970443297405009 +-0.7478875818657547 +-1.674957786330752 +-1.5999782740347872 +-0.9439646416610217 +-0.2891413521399191 +-0.4860126959006198 +-0.8532461376247495 +0.12694828948960413 +0.7757390897766554 +1.1590600410029765 +1.2677865265473713 +0.5534901511514354 +-0.08119259375746957 +0.7317156032205985 +0.5423179114282145 +0.5423179114282145 +-0.006196120743230726 +0.7493505044540077 +1.1873253360165315 +1.2386654697131156 +1.236883256515585 +1.7920040978786775 +1.5350304691969394 +0.7991782878528675 +0.014465826196668585 +0.014465826196668585 +-0.7532911025310247 +-0.9602558732027023 +-0.17248973224206188 +-0.6818129570863164 +-0.6440838289235701 +-0.9560932920863605 +-1.3387458525515852 +-0.5373757708567779 +-0.989667748137354 +-0.9170299426620611 +-1.722017133392416 +-2.4691021951758616 +-1.8174979441872654 +-1.6266247979984707 +-0.6496924997055413 +0.20642028929160716 +-0.3770838236855403 +-0.16542992251651678 +-0.8379824517698777 +-0.9188167876724967 +0.027985132786130573 +-0.33774600295427537 +-0.48927090028701425 +-0.1244288286299523 +0.11174692252590368 +-0.7578890878684162 +-0.20077614614374018 +-0.16690986742607883 +0.15986614930384835 +-0.34094069373518365 +-0.7387501669338028 +0.13703652796786514 +-0.5447849595893244 +-0.626182375305054 +0.15180046609047537 +1.080662590481333 +0.8974672160964693 +0.9440304499655726 +0.9440304499655726 +1.5383366633072786 +1.5915974998413807 +0.9750263469028941 +1.2998521567037826 +0.6813032407171931 +-0.04311305548644828 +-0.9707304856075107 +-0.042869800102561584 +0.8006091086762912 +-0.0997478294409162 +-0.1444532654050944 +0.14744202004993323 +0.6217201124484261 +1.4576831507851025 +1.4300854119893325 +2.0979958704922725 +2.9918457822531437 +3.6036052895857162 +3.0140180564876813 +3.713279773369051 +4.5107285545274385 +3.641821997872252 +3.4206020105295223 +3.476002117968849 +2.513899184097428 +2.466810226396519 +2.982646387639769 +2.2456428322813853 +2.0386123069545485 +1.7252791650208268 +1.0670104712270914 +1.902833823952295 +1.902833823952295 +1.58270510988081 +2.2952323283413745 +1.5423471588334814 +2.422173992259008 +2.659187483910424 +2.1372226772683858 +1.8596943511800483 +1.8153251897247658 +2.2037356459723294 +2.8616960413493375 +2.144126189134696 +2.144126189134696 +3.129905873184547 +2.706054769879447 +2.671299598195408 +1.8033260171580459 +1.8027304173261416 +2.3697229948300906 +1.8815829995307256 +1.3429412641746137 +1.5389702886948053 +2.2235213797067144 +1.6656342520416347 +2.2037215274634 +1.8048756069259642 +2.5669773623329886 +2.6715317895537094 +2.4617314195753397 +2.4483104505891844 +1.7602558693388837 +1.1226533306690072 +1.5915612939120962 +1.699769094146904 +1.407277219156959 +1.115111193529462 +1.7817719592657872 +2.69882824669975 +2.2729019908454533 +2.636036191039816 +2.6433808227611832 +2.2201639955648997 +2.2201639955648997 +2.2201639955648997 +2.975478876107146 +2.9310953631418184 +2.5251390994747527 +2.5850953185119074 +3.211210923853123 +2.574453948937305 +1.632732264893957 +2.232017458456168 +2.052717925217573 +2.398279563084178 +2.4780971617999494 +2.4987148344212384 +2.1683583720203563 +2.36419985208596 +1.719541871500679 +2.4408576723179642 +1.9698296236188582 +1.2629695286056182 +1.4745554557798926 +1.4745554557798926 +1.1336198728539961 +0.5003246878680652 +1.0511649472475975 +0.6652749894355187 +0.43996151296303077 +1.3791612360406034 +1.3713236157763173 +0.8449876960526415 +0.6016950659415617 +0.6016950659415617 +0.852940008380244 +0.059193534754057864 +-0.5769114326573114 +-0.7098171370973052 +-0.6160486910763734 +-0.18646961746049096 +-1.030958597179112 +-0.6635717308521736 +-1.3672765653532222 +-1.7631519649533027 +-1.0917187662574261 +-1.9837880903278549 +-1.7437145638574356 +-0.7881210866567028 +0.12683826238769713 +0.20264833008931582 +-0.24051390895362268 +-0.03475438009349385 +-0.03475438009349385 +0.4443726299949363 +1.1969954521475579 +1.6619161156364122 +1.892218901565055 +2.8259153726165485 +2.8722827097430654 +3.0792716170516927 +2.1879570521044522 +1.9495455768299248 +1.5793186602698603 +1.1634932713570088 +1.676973869241075 +2.067503177563659 +1.819771080342714 +1.4966520266054393 +1.671341334122745 +1.9372527937455084 +1.7816793875302142 +2.6223263364047784 +3.0921679139321023 +3.6123923750806655 +3.6123923750806655 +4.404836844569599 +3.977629515648826 +3.244275885593612 +3.094768288855723 +3.094768288855723 +2.2110200437875775 +1.4082190948827007 +1.8586795704429044 +1.3472015473654524 +0.5815766338573007 +0.41144526372399326 +-0.3439068165738387 +0.3398191508001226 +0.04944080643129034 +-0.1805545951684685 +-0.604029852751405 +-0.8528683589176024 +-0.8374300757302083 +0.07011271368922756 +0.38471021223598345 +0.8777607045372958 +1.2393613201857114 +1.3535708659962886 +1.925861593645183 +2.614425808026896 +2.614425808026896 +2.248210169885873 +3.207351937279049 +3.4182879070492684 +2.8406327207592486 +3.627351558066254 +3.42914584499288 +3.146644506897616 +3.566401856662642 +2.940266753308033 +3.33537994047743 +3.123535966877317 +3.905108147247342 +3.2383102142659554 +3.2383102142659554 +2.3861080610491765 +1.6922212378075023 +0.823061358761497 +0.014514166827665598 +0.20240922821740903 +0.09939747214493078 +-0.7407527775355173 +-1.3117684762866317 +-1.1031421269659065 +-1.1031421269659065 +-0.29538017067125666 +-0.5268664034347837 +-0.8799678649822429 +-1.5922334841378873 +-1.2643494633886816 +-1.1028901959900639 +-0.83655258632621 +-1.815599075207717 +-2.776666566811387 +-3.377657250988333 +-3.977493407297413 +-3.977493407297413 +-4.581785239506588 +-4.225461129659221 +-5.063173936612829 +-4.911595619328683 +-4.675825668285399 +-5.032879824134294 +-5.032879824134294 +-5.258903785342431 +-5.343725737124164 +-5.829323443726277 +-5.1533603760867095 +-5.785392484068063 +-6.051711121558338 +-6.142525824628453 +-6.142525824628453 +-6.408890518068232 +-5.489070484425959 +-5.331164135775182 +-4.973717955652239 +-5.746900625183376 +-4.839885006337049 +-4.839885006337049 +-4.66170404367298 +-4.343910015541088 +-3.5394512874398045 +-3.5158460146885684 +-3.880285648812085 +-3.88886138460312 +-3.4524039090941274 +-3.2708357907365153 +-3.1296243307200022 +-3.5260850944736326 +-2.7236064678653977 +-3.2195508833742665 +-2.9056799855632747 +-3.187269680827683 +-2.516979702240556 +-3.248709498267325 +-3.118276421167813 +-3.7174524860613296 +-3.45684151909242 +-3.9937394848486147 +-3.622258734626084 +-4.486651509418112 +-3.793655975050277 +-2.8003858307007636 +-2.672741100882282 +-2.492282809294167 +-3.020658068626406 +-2.522692826952186 +-2.2776551117688815 +-2.562116397246335 +-2.650925706303389 +-2.5275889093635744 +-1.9670560327721343 +-1.6376640140620877 +-1.3627631023493207 +-2.2418427786480883 +-2.2843321805783705 +-2.2843321805783705 +-2.6758727617943547 +-2.257819916954066 +-2.010921717574201 +-1.9891217921463265 +-2.2266673325850714 +-2.628928084532945 +-3.5514680634196445 +-4.110452710098629 +-3.331566510480711 +-3.331566510480711 +-3.331566510480711 +-2.8213337066999027 +-3.4933921283783604 +-4.12253338035246 +-3.5639922609360575 +-3.955954037894382 +-4.502192181286338 +-4.810856780995756 +-4.082042006930768 +-4.659346663477441 +-5.394128845309716 +-5.886828603889268 +-5.886828603889268 +-6.823336761968569 +-6.224630576854838 +-5.799897812873258 +-5.584895017431805 +-6.278609163124354 +-5.843272261083613 +-5.556861716309674 +-4.841532056864842 +-4.396852663846871 +-3.538931960243698 +-3.6334065557904394 +-2.8679594044310166 +-1.94922811933643 +-2.4902174735975056 +-3.33305191782037 +-2.957603166267055 +-2.994878501563223 +-2.308916304922595 +-3.191040773705814 +-3.3388861337902185 +-4.116934445173719 +-3.5181088836937513 +-3.345349258028226 +-3.311635380934005 +-2.775132094483526 +-3.0752211451134652 +-2.594966899312957 +-2.7842032211192085 +-1.9231320453864578 +-2.6539612314327035 +-3.5649881028812 +-4.002243622006281 +-3.5869107111460643 +-3.5869107111460643 +-3.544357448395589 +-4.327691407049601 +-4.477554911328771 +-3.7232473854244765 +-3.1833303056187416 +-3.1833303056187416 +-3.028499703665677 +-2.6310730646485223 +-3.2507725984499207 +-2.3391808521728805 +-2.170284625409449 +-2.72967526226723 +-3.19917012893748 +-2.2206714498930165 +-1.9849042165592081 +-1.2288091792267621 +-0.7979089592026269 +-0.79959504560914 +-0.5217988224696143 +-0.16815546096329992 +0.6312552843332161 +-0.16470969474549035 +-0.5572339538552893 +-1.1008517015307555 +-1.8534780959496824 +-1.8534780959496824 +-1.3367884120743336 +-1.8729433435741778 +-2.7380940964763694 +-2.7380940964763694 +-2.307807146413337 +-2.307807146413337 +-2.8128772518300833 +-2.0797678711403043 +-2.8039062553646943 +-2.363113406350861 +-3.3209224569069606 +-2.8525731250243673 +-3.682707638940996 +-3.8216359289257333 +-3.394379489826676 +-3.1945718332445963 +-2.9151992887065807 +-3.365269769027093 +-3.365269769027093 +-3.352845861303468 +-3.7470637142933394 +-2.937447582995168 +-3.7966737156168255 +-3.7966737156168255 +-4.723139257219702 +-5.409731245636621 +-5.409731245636621 +-5.696567649743069 +-5.696567649743069 +-5.024545663533845 +-5.168205413786714 +-5.168205413786714 +-4.968057241631938 +-5.659560304323943 +-5.401988241319312 +-5.008786976214965 +-5.17534717634679 +-5.077321451962187 +-5.163975269976967 +-5.333265319881558 +-4.635239807425862 +-4.761683826173792 +-5.591407310315645 +-6.288490015302679 +-6.055974908871811 +-6.708593963500393 +-6.708593963500393 +-6.708593963500393 +-7.001929719244011 +-7.539959727477736 +-7.370957609353064 +-7.370957609353064 +-6.875331765086761 +-6.991062465108444 +-7.363886439463373 +-8.335518321020837 +-7.803379850311682 +-8.105278240735322 +-7.892604283825785 +-7.517087466430639 +-7.517087466430639 +-7.611790793917927 +-7.179575670274904 +-7.9157398751666275 +-8.15863859336788 +-8.15863859336788 +-7.2080775800262415 +-8.104947077389223 +-8.104947077389223 +-7.763665008673184 +-7.577885064538749 +-7.288922776832142 +-6.431902981330955 +-5.689465758743343 +-5.689465758743343 +-5.37865670984749 +-5.37865670984749 +-4.906761192082294 +-4.412512608710301 +-4.412512608710301 +-5.154644161026937 +-5.26026622293292 +-5.26026622293292 +-5.185631397403056 +-4.565440480974015 +-3.9563752768382696 +-3.48662505643553 +-4.232193061769672 +-3.3999941777486375 +-2.5331971810035347 +-3.412843497060222 +-3.4083492781529747 +-4.347460108981297 +-3.7466355475305884 +-3.7466355475305884 +-4.36666122809739 +-5.256861846558508 +-4.852066094380804 +-5.06700420283907 +-5.706883354453219 +-4.996795624912671 +-4.996795624912671 +-5.245042691997837 +-5.28020355053677 +-4.81033942931536 +-4.927672163465234 +-5.170868895897596 +-5.170868895897596 +-5.111750880708916 +-4.728694373441886 +-4.45217890602232 +-3.4946836453070076 +-3.4946836453070076 +-3.593595869317306 +-3.9239524584667294 +-3.447675133841635 +-3.26583881443508 +-3.4804085162108684 +-4.083243103083779 +-4.071485292599329 +-4.691587536271807 +-4.691587536271807 +-5.300199682988979 +-5.195555004259485 +-5.378210683203904 +-6.253371630249254 +-5.890848253021556 +-6.015016672715527 +-5.558524219882432 +-4.81479496035243 +-4.763362844615248 +-5.004691657170957 +-5.185730276055125 +-4.675129238719432 +-5.564193575620095 +-6.005668931948859 +-6.005668931948859 +-5.450533341585723 +-5.450533341585723 +-5.358244635463082 +-5.8356514779350785 +-5.821086369501472 +-6.050825799113345 +-6.864939939869957 +-6.864939939869957 +-6.271104963324314 +-7.176265138086268 +-6.525013925685027 +-6.697541586862459 +-6.777110289989696 +-6.540802620206571 +-6.3601403779916055 +-7.100604439282212 +-6.3531529760462675 +-5.381349588326721 +-4.992673727005486 +-5.797534904485222 +-5.188249796136514 +-5.532351830453326 +-5.7951680525354 +-6.374050563940286 +-6.070020140252516 +-6.070020140252516 +-5.565838359781754 +-6.0981505998858445 +-6.398932448726777 +-6.594478100805759 +-6.498241875659705 +-6.498241875659705 +-6.82420256939106 +-6.82420256939106 +-7.074481605022107 +-7.650518599176896 +-7.650518599176896 +-8.064969292171059 +-7.720909672902943 +-7.720909672902943 +-7.695634382064083 +-7.695634382064083 +-7.089701767354834 +-7.089701767354834 +-7.30665950482838 +-6.481566264251461 +-6.014466256479306 +-5.637554569069614 +-4.72950830172506 +-5.413664418899817 +-5.785882012179295 +-5.785882012179295 +-5.54224085196042 +-6.507011949639363 +-6.719829156968191 +-6.65774143742008 +-6.990125396571795 +-6.990125396571795 +-6.280872374280329 +-6.498656558712653 +-6.498656558712653 +-5.544992194757149 +-4.916143300612526 +-5.455624873126454 +-5.766394115939216 +-4.991285791344291 +-5.884804167989878 +-6.237178483449522 +-6.529701021522557 +-5.631350858651292 +-5.024454549066109 +-4.452692137877754 +-4.5830003453524615 +-5.3157675505371955 +-6.220623478933519 +-6.220623478933519 +-5.662017624405339 +-5.519811876900849 +-5.298228332820379 +-5.234721351057098 +-5.149982732960135 +-4.4641403619287585 +-4.6593981329991525 +-5.1903179941112665 +-4.328703883045101 +-5.125050568786932 +-4.423906730879236 +-3.9028606816126734 +-3.9028606816126734 +-3.219387623860176 +-2.9106989921982818 +-2.6689035403611623 +-3.642585788821435 +-4.095329240966663 +-4.306965612021321 +-4.9916579717558935 +-4.9916579717558935 +-5.347454077703338 +-5.258276858459895 +-5.827713425991487 +-5.3606396645297 +-5.562633872842152 +-5.236363268479328 +-4.4106214764742635 +-4.657746696901867 +-4.657746696901867 +-3.850741331298619 +-3.449996518944143 +-3.921245485914109 +-3.8409511395862483 +-3.7644566275029323 +-2.9230396177383353 +-3.1527893548084465 +-3.647404594113154 +-4.392118173234759 +-4.392118173234759 +-4.543755743876805 +-3.8518496063405108 +-2.916099555297135 +-2.916099555297135 +-2.5900446729860134 +-3.0569825803640662 +-3.232921848836695 +-3.7157863109803255 +-3.968429443196883 +-3.5071920839938757 +-3.3542926447871206 +-4.049917679745401 +-3.0675956485477194 +-2.549419889360676 +-2.8021738720914935 +-2.948888442913703 +-3.709012664911917 +-3.4516562465087017 +-4.113136115279534 +-3.3805995206498043 +-4.239407608947765 +-4.239407608947765 +-4.239407608947765 +-4.819443924095286 +-5.131639594652518 +-6.006598129947531 +-6.006598129947531 +-6.955559932484882 +-6.15527180364106 +-6.036366844799378 +-5.902675292746782 +-5.036871291301067 +-5.975594139405924 +-6.005095321922569 +-6.005095321922569 +-5.727516072041911 +-5.5053619983733855 +-5.3844910844596825 +-4.491299062356897 +-4.166451440406382 +-4.327809078468539 +-4.402127452985264 +-5.028275382134836 +-5.161618698392133 +-4.263948597992195 +-5.164242344621011 +-5.164242344621011 +-4.953874728461366 +-4.86091089784766 +-4.790974697754173 +-5.262312947346661 +-4.989472538679041 +-4.708105323067194 +-3.827369412680561 +-4.119765668654911 +-4.390163489414258 +-5.078409655466866 +-4.660152980533696 +-4.973870640679772 +-4.4418833394131925 +-4.474358199065154 +-4.803553288431962 +-4.189588426947621 +-4.183174646714349 +-4.931224699758343 +-4.931224699758343 +-4.021338919870524 +-4.021338919870524 +-4.336829259435627 +-4.336829259435627 +-5.193402307170558 +-5.193402307170558 +-6.063018533771834 +-6.459341047752489 +-6.400834729927229 +-6.400834729927229 +-5.897966311672089 +-5.883578610115341 +-4.918980278032836 +-4.795459509627751 +-4.583464801877966 +-4.780008902747239 +-4.444894599207828 +-3.6911908246134937 +-3.289377314962608 +-3.2442398230547216 +-3.2849245479927642 +-3.2434228545518478 +-3.916993923622279 +-2.9648525806742105 +-2.9864465337184596 +-3.877209307785251 +-2.9034163015896883 +-1.9870744492659664 +-1.4219404700864986 +-2.323183458136429 +-2.193439450691101 +-1.5793200240027516 +-1.340018137272402 +-0.4024742866193469 +-1.2371580719355262 +-1.2152976931772852 +-1.2815228884877152 +-0.4885899236739406 +0.31984806668278587 +0.4737362170756587 +1.3712724819511415 +0.48885748941698015 +0.5503266611464035 +1.2666782885873964 +1.3702140402889982 +0.8235400909205854 +0.5951227802890818 +0.5951227802890818 +1.0694409266992682 +1.4936291057611673 +1.5854290244117213 +0.6416427199642103 +0.5256341412893529 +0.9802712915708952 +1.2021182152728125 +2.0000353771859114 +1.0565260126085412 +1.1057586184292822 +1.566130873510634 +1.5715544282097682 +1.0575578017248266 +0.8369405876560113 +0.8369405876560113 +0.2520778486272176 +-0.17108865459758538 +0.3636613461963718 +-0.42778121409681846 +-0.7907282203968989 +-1.1125223520191916 +-2.077627115578608 +-1.2228146303534855 +-1.4030640679045705 +-0.5075587038087852 +0.22788579568618061 +1.0605830891226415 +1.4115247744533712 +2.359199966408779 +1.6018339752193902 +0.6540260704370502 +-0.010855422013894334 +-0.820747497029932 +-0.2415451799438062 +-0.44106392134392836 +-0.813625364190355 +0.09661591286003435 +0.8646999822213313 +0.9026374742784826 +1.054697040203612 +1.6304110469800335 +0.7827743462430021 +0.24048680250912446 +-0.3007067418540872 +-1.0267392937413058 +-0.838825065908009 +-1.469142908878771 +-1.2519190616776388 +-1.3003609855362757 +-2.0780053149330304 +-1.3943142965429114 +-0.7872004457075634 +-0.060405128878719516 +-1.0359347716901794 +-1.2870616240988118 +-1.9389129222439618 +-1.714580771605265 +-1.246412659922559 +-2.239187195413897 +-1.6625893469794244 +-1.3682096547031444 +-1.3248486921233797 +-1.3248486921233797 +-1.2868425828663936 +-0.5450202906659218 +-1.3360640793949259 +-0.8058758052418729 +-0.569491877308494 +-0.70962842094196 +-0.16584419662395777 +-0.7941120498180626 +-0.22954554648196857 +-0.44007763058312244 +-1.1658178777851569 +-0.7435304815779931 +-0.9078921324309642 +-0.8249436560771793 +-0.602688359402115 +-0.8145132182058596 +-1.5103590307484156 +-0.5664155344570279 +-0.01956652487323174 +0.792313521196546 +1.082817153413651 +0.6809678621184309 +0.481103437899705 +1.4458426105047835 +1.6061433790905355 +0.8721564578425982 +0.17296559158164704 +0.5521158126414665 +0.46404953291668993 +0.12349847576011497 +0.8677664258411726 +0.8677664258411726 +0.3313674966485789 +0.033070451656563304 +-0.42354134980287195 +0.5338670236020158 +0.7654737754131145 +1.0488788790875585 +0.24926619867939426 +0.6839321028461389 +1.396726187326784 +1.3249949218012622 +1.5309579791942765 +0.6404998967115252 +-0.33326618691739585 +-0.33326618691739585 +-0.9882540999742182 +-1.9067656638571064 +-1.3751794759999523 +-0.6209527711700149 +-0.06437754027148412 +-0.9052500819099578 +-1.1313483311370263 +-1.03153517127767 +-0.4520006752114607 +-0.9607436647671139 +-0.49620350831460813 +-0.5684075055875885 +-1.0885079369377406 +-1.978081340825641 +-1.25820523221633 +-0.9351920122117199 +-0.40814604704419954 +-0.40814604704419954 +-1.1267728252648421 +-0.5215700819902196 +-0.224406101553829 +-0.6671664820944162 +-1.3229047903429256 +-0.41678212466381415 +0.22995881406147256 +-0.04085151245127905 +0.5647783825618532 +0.14957045981387984 +-0.20330357552765432 +0.2691133895047991 +-0.5491882131154967 +-0.010560033761590648 +0.8851507988941877 +1.3624406541539162 +2.0865373912898564 +1.7120477882390457 +2.2833877060948966 +1.9323711540012494 +1.6061681935087115 +2.3373757147793803 +2.5281964180547716 +3.1489061586223706 +2.7969211664768894 +2.471142995165368 +2.471142995165368 +2.720654661293964 +2.410180603018231 +2.1188874005804257 +2.1188874005804257 +1.7271226767924697 +1.140023831622703 +1.1854053277752465 +1.6641305084651208 +0.9506505684510536 +1.825989793147768 +1.4726236183587122 +0.7520779081605444 +0.6711795042016516 +0.4187850319637869 +-0.3208091499219221 +-0.6326089144719312 +0.14232868895366846 +-0.1742736798944522 +0.7077103767372359 +0.8918834960972226 +0.6730098837328699 +0.6161943648808914 +1.3877226317405689 +1.1596706868098132 +0.24685531769675806 +1.1443265679266612 +1.2522884871351503 +0.32629503718780706 +0.6445866892832894 +0.024965803117458663 +-0.45439958651141443 +-0.07356217065064297 +-0.035702424203109095 +-0.5500323308196985 +-0.0014984606904618891 +-0.11129158231545899 +-0.287099939829606 +-1.1168563099709696 +-0.2827697405899874 +-1.154070308206823 +-1.8764596816671804 +-1.5846317743201637 +-0.7871413939091572 +-1.7201578450150001 +-2.103106645383808 +-1.9103622304174959 +-1.8866553117891072 +-1.028089067355052 +-0.048318601899721036 +0.05753053683882481 +0.4561488046337425 +0.3148069226549436 +0.39090872437973145 +-0.2924542071955786 +0.2931250952597467 +0.9035579303960913 +1.0565792027231873 +0.565977305532504 +1.2832560719265595 +1.3862426893442632 +1.2368978626998612 +2.0842240489330126 +2.5840476647830797 +2.8140276592482474 +3.4132417328101994 +3.439120095243628 +3.2371439113875358 +2.3130920723141712 +2.6173870639235304 +2.0563527794749565 +1.6440723018219523 +0.9113446767006355 +-0.0205294939065932 +-0.542916823344846 +-0.542916823344846 +-0.1377326215506296 +-0.5505521553770537 +-0.6938373703821841 +-1.2574167420854208 +-1.5097618687443473 +-1.9904166004624622 +-2.9065698195875163 +-3.130589299406058 +-2.9040460863600117 +-2.018803986123265 +-2.3517169028132443 +-1.9593957291790012 +-2.3395617946592075 +-1.7036209870194534 +-2.0076964917820352 +-2.342712612235521 +-2.891287089260601 +-3.834012920509891 +-4.32617475847204 +-4.32617475847204 +-4.937760647640301 +-4.7120153580379425 +-5.230418991583975 +-5.1838959226469115 +-5.509429038224742 +-5.643491904647167 +-6.613831804489972 +-6.589154368680246 +-5.905908116498475 +-6.189090687941266 +-6.345519046258771 +-6.840833838305166 +-6.812585899787939 +-5.952789200857129 +-5.817737929228858 +-6.362323248886772 +-5.410421611935363 +-5.410421611935363 +-4.473517357694689 +-4.01464974761255 +-3.6575322354442465 +-3.6575322354442465 +-4.546242524360563 +-3.9764867672878994 +-4.814409223969398 +-4.054098104664366 +-3.7199618988804737 +-4.0244181626291144 +-4.469363000334564 +-4.469363000334564 +-3.9183643967469335 +-3.594008374334916 +-3.523054985481668 +-3.308257652025794 +-2.446486316605999 +-1.5161379074603147 +-1.9694748052772049 +-2.507421202892593 +-2.472449666232722 +-1.9719174925758194 +-2.800047328051946 +-2.310203739089859 +-2.5693834493982273 +-2.367493958023683 +-3.339269418385954 +-3.0060856339374924 +-3.6729728823060768 +-3.9721258748908737 +-3.9721258748908737 +-3.5971039888439167 +-2.7293916172820643 +-1.729595506524396 +-2.7213364596653262 +-1.8678528051216887 +-0.9712331248838675 +-0.769293090938056 +-0.6621184549713182 +-1.5139513367439836 +-1.6212135432266903 +-1.5471445837738957 +-1.6787751639329542 +-2.1352829504458652 +-1.6557321740374962 +-2.020347197859064 +-2.908082640821351 +-3.1132927456371378 +-3.1045943334507005 +-3.6704008236513603 +-2.947201911977661 +-3.200037629440815 +-2.5295732887104156 +-3.0135300043863977 +-2.3635423678790675 +-1.6335989882800652 +-1.6281463365004019 +-1.1608745583025135 +-0.8202228631484345 +-1.395387867126696 +-2.1551053463148624 +-2.5795584197377677 +-2.629507314806434 +-2.1968869228091883 +-1.3469298759986845 +-1.5804275930150555 +-1.7189688528759972 +-1.6748436368500892 +-2.1032020964678364 +-2.1558299670473553 +-2.333051864051925 +-2.3955694437486343 +-2.2033551608783846 +-3.1335920892426117 +-2.2585719102144255 +-2.4456382630014057 +-3.14476913307454 +-3.112932042595986 +-3.255742330294544 +-3.6814000500940907 +-3.9733468710519015 +-3.3254185503870857 +-3.085680921582945 +-2.9866705846536723 +-2.00532017786228 +-2.6673505437966876 +-2.2315370760782285 +-1.864885289426236 +-1.663810348317152 +-1.0894233472720707 +-1.1171875166418865 +-1.4950724074676707 +-1.5467721164866055 +-1.8324842142665876 +-1.6688455873227845 +-1.3440051201248273 +-1.5226532578050205 +-1.7323106565015687 +-2.583837686487513 +-1.6409910933371965 +-1.0284462746648415 +-1.6967069683049059 +-2.4049645423172246 +-2.2408508083140863 +-2.2408508083140863 +-1.523084099511583 +-1.1133468153889843 +-1.4095787206757682 +-0.9079330540985329 +-0.20096768901895135 +-0.568279517158453 +0.0403736077969018 +0.5541589015138065 +1.1020779387665272 +0.7120341013150794 +1.6083730462588721 +0.6693548426101992 +-0.0029050050452088527 +0.43860870111282635 +0.29963816542863986 +0.5481200221182007 +1.5003808325173664 +1.6271153816160733 +0.9096555916630145 +0.03269941297360934 +0.39561885825062704 +1.0266318684451636 +1.624484987901335 +2.5206590194978116 +3.030718617540912 +3.7095801651908786 +4.664878887757816 +4.231080773565384 +4.85911493267201 +4.180760065959884 +4.624916362376915 +4.049446636254604 +4.000988456223686 +4.019751325635374 +3.9012869626336664 +3.1888157979107667 +2.881342926475127 +3.3157403877076446 +4.146542363058894 +4.102214011282144 +3.2111797140678697 +3.2062966776477104 +3.2062966776477104 +3.542192697445622 +3.5414869404323492 +2.6413864345688873 +2.1748282003627226 +1.9286656901032266 +1.3331532838569784 +1.0599922954189185 +0.6912861673523806 +0.6912861673523806 +0.6177654442314531 +0.03032559033292115 +-0.3155615697594275 +0.044420058151305786 +-0.41040168589644255 +-1.0419529367393392 +-0.4013598125455322 +-0.9637525392900879 +-0.3198121898925499 +-1.3075931097148263 +-1.0652946399556344 +-0.23825526251812335 +-1.1773175466682133 +-1.6875306057725514 +-2.528040255942319 +-1.8816687751253012 +-1.1707449832593864 +-1.9173071226905383 +-1.247306943879394 +-1.4468360635717294 +-1.4158562721547017 +-2.1702196276418237 +-2.8229222670526317 +-3.5336785571571605 +-3.9210746254582522 +-3.6324099457754806 +-4.148318517374514 +-4.7341093422457465 +-3.9487082736532204 +-4.202563540128363 +-3.4675321549079223 +-3.0637406992918343 +-2.3968454848130483 +-3.299161229143988 +-2.9377308271186875 +-2.9377308271186875 +-2.561198048846097 +-2.561198048846097 +-1.580654453056187 +-1.4652760161609482 +-2.3809783857889046 +-2.416502071428747 +-2.5114035049100196 +-3.046311660558603 +-2.695943709133229 +-3.179166756535353 +-3.924852726276307 +-2.9834149405502672 +-2.9834149405502672 +-2.340783829074133 +-2.340783829074133 +-1.772841928445101 +-2.5443183064573796 +-2.84958250744707 +-3.5101106217886806 +-3.981861352320887 +-3.981861352320887 +-3.2441524267403388 +-2.3854257135298313 +-2.285014005433588 +-1.6657472793303851 +-2.310100230281586 +-1.6196187271064046 +-2.178637460089515 +-2.170265503955945 +-2.2778495722033294 +-2.163401846559266 +-1.190306423620444 +-1.3234033709175241 +-1.0859561387126884 +-0.4041075453997962 +-0.3744449530775038 +-0.9172932309396025 +-0.31555592155959267 +-1.1350992799907391 +-1.4526778482646279 +-1.4141682448373145 +-0.584530467080044 +-1.1578650864963294 +-0.30616090285815756 +-1.217796697044263 +-1.68814168602858 +-2.308037045984591 +-2.5511937096724417 +-2.418419938421911 +-1.8142046596831984 +-1.3189453691637143 +-2.239007796330628 +-3.098464160205655 +-3.8617980093824036 +-4.7886236094963435 +-4.967297506141364 +-5.932832353589282 +-4.939339950716085 +-5.358754335758804 +-4.900379093543463 +-4.590162182135313 +-4.088343036740071 +-3.6145090419216266 +-3.5550223645014216 +-4.21010136453672 +-3.563684559169043 +-3.5213769653556626 +-3.293480096652237 +-2.567064414167895 +-1.6080684507506053 +-0.7415910143009852 +-0.21518514615265083 +0.013497046734910256 +-0.3004909027387931 +0.17243693202220356 +0.9855700304185911 +1.1548038176771307 +0.7683043924171401 +0.7335690231088818 +0.6043441544834695 +0.794081860556444 +1.541439036465842 +0.5809267540255962 +1.5749611889983124 +1.1936141445839876 +1.968510574860511 +1.4648876926394419 +1.7885973457215305 +2.0307706689191463 +1.4162967748368926 +2.205971942720968 +1.8692218288726585 +1.3245334131608666 +1.067827545590366 +0.7047450642461021 +1.703585608611038 +1.3239502847249267 +0.6144440392699555 +0.0847835175514553 +0.9178889873664595 +1.0106007693971981 +0.4285010531891773 +0.7852280158677383 +1.5860497779034535 +1.343103455760886 +0.4374111789795305 +-0.4626232538554065 +-1.31156217838315 +-1.9258395725320547 +-1.2635000652040593 +-1.915924418696811 +-1.8289507194466073 +-1.8158233553807235 +-2.224688753618297 +-1.5951777386873365 +-1.2256167674373035 +-1.3483302252393914 +-1.3483302252393914 +-0.9074359989785248 +-1.6233605506439674 +-0.7038144494311565 +-0.7038144494311565 +-1.2411598281831493 +-1.1644965528972375 +-1.3055909200975564 +-2.2872976560342635 +-2.4337695723593 +-2.6073624661607746 +-3.3469938917722875 +-4.245126112609416 +-5.062931217377606 +-5.953197200980387 +-6.6179548814940325 +-6.445231363928585 +-6.445231363928585 +-6.050763854586209 +-6.29052073218551 +-7.173599516955212 +-7.173599516955212 +-6.351882074782981 +-7.309081530459544 +-7.365877476807666 +-7.365877476807666 +-7.204737526735617 +-7.0884288671083615 +-6.337690864128113 +-5.450504947958985 +-5.450504947958985 +-4.50336381543551 +-3.649560301682521 +-3.6600196322290697 +-2.8999684967215 +-3.194449309478228 +-3.0917902024521866 +-2.780397554666889 +-3.2006147480030664 +-3.2006147480030664 +-3.899923779226257 +-3.4970926161195544 +-3.271333702854708 +-2.5683392377368026 +-2.454998236802097 +-3.2132128496252426 +-3.2147567901558673 +-3.6099266518357167 +-2.6294538112061803 +-2.5010980131696305 +-1.7613817642199676 +-2.5006956502397886 +-2.5006956502397886 +-2.675709412367918 +-2.355313409487546 +-2.0395437460165784 +-1.973070089327135 +-1.8391970655048218 +-0.9463840363272089 +-0.017492811679618026 +-0.017492811679618026 +-0.11490002219324646 +-0.9076593591863932 +-0.4886266572423358 +-1.3877875979016001 +-1.2158165342590672 +-0.8963777133669848 +-0.018996565444975078 +0.42083221373452906 +-0.04785660090960253 +0.6161826858328686 +1.5794955155914043 +0.660907328209305 +1.101131322785813 +0.7452229775599616 +0.9611899273542927 +0.6179319554569787 +-0.31457264280121966 +-0.299034950818966 +0.06954259588372658 +-0.5247559978083662 +-1.1968384122710731 +-0.9712339732758526 +-1.0273397925164263 +-0.8104579796863876 +-0.8104579796863876 +-1.282672303416616 +-0.7397276823631185 +-0.3759716707216805 +-0.11884497903569002 +-0.7808788027384406 +-0.8398662036264216 +0.05368140077998318 +-0.833460156888416 +-0.12082543814900715 +-0.39420920263881576 +-0.5579835783258785 +-0.48017072002651273 +-0.2574340336681892 +-1.2539390649678706 +-1.2539390649678706 +-1.5508295646649226 +-0.6477609612355761 +-1.1158770552638102 +-0.43323958142683394 +-0.3082610014393885 +-0.5757679336158111 +-1.534049727314974 +-1.2528323338521539 +-1.5646854680990727 +-1.0507747893757258 +-0.36607811944703506 +-1.2111840439578339 +-1.1914643988799087 +-1.0316291532860982 +-2.016261532219654 +-2.2803382552791773 +-1.5699264595041684 +-2.5207126469904653 +-2.311904157755967 +-2.311904157755967 +-2.6740453219558287 +-3.499429802565193 +-3.340844508884365 +-3.2741998591167 +-2.4948858714272504 +-3.1085750126356153 +-3.1085750126356153 +-2.8382286981638067 +-2.5324146141206194 +-1.930983331787597 +-1.4909685684150038 +-1.5619627307925446 +-1.826201405686056 +-0.9304494279728976 +-1.9020399038548659 +-1.1625092204418623 +-0.6314339247911498 +-0.2631629966095592 +-0.9453315642696554 +-0.45035533323289756 +-0.38334066306118575 +-0.1738110517731266 +0.6155293089324712 +0.4058295649521896 +0.619412104504364 +0.19876906818425688 +0.006924292927493192 +0.09652901974134187 +-0.6692826592114917 +-0.19757158617833437 +-0.405776257933707 +-0.519180367768166 +-0.46982494813720066 +0.36498781350722476 +1.0935314994706413 +0.37695731701837976 +0.45331438923284595 +1.4527071208588684 +2.0774683298271435 +1.62538441717534 +2.4123317237755586 +2.4123317237755586 +1.7761684858267373 +1.4905669324582167 +0.9687885240720215 +0.5295711370627404 +0.6598317437593054 +0.24370260709288316 +0.4272723187046925 +0.5061656853691434 +0.3549845654329843 +-0.2467303341320296 +0.45127526182038735 +0.32104105212316747 +0.28051122240255 +1.253105759581695 +0.8531113452235147 +0.0698363758498769 +-0.24727373729971647 +0.07244036691798938 +-0.08589700007546608 +-0.868685822733568 +-1.0538642318419809 +-0.8390003758112479 +-1.752362097006509 +-0.7526515033983134 +0.20140092101302365 +1.198465424954607 +1.999836807782203 +1.7733619128558646 +1.8589397180647995 +1.6655480303254548 +2.060655318118644 +2.9473730328214245 +3.5337051403460435 +4.5253346265536605 +3.6329406380388387 +4.059773858366066 +3.7292844433656223 +4.1161228702305115 +3.8230738905613344 +2.940218604163238 +3.786388155569547 +3.1101573672935836 +3.275385937068992 +2.299616487020783 +2.299616487020783 +1.7648325373310754 +1.2974460831641879 +2.119259291775495 +2.3590829495041294 +1.6213665714811207 +2.2194793247277538 +2.6083878412309645 +1.9506012371386834 +1.043087228948915 +1.738266403759134 +1.272613229781125 +0.6445844420097449 +1.0055562649198229 +1.9346954404085561 +1.0368791420434653 +1.7969579872990542 +1.1829739963476074 +1.884912254712348 +1.6944828490111266 +1.6944828490111266 +1.9211118389634685 +2.8490600419602394 +2.8490600419602394 +2.104068861662954 +1.5690799247653515 +1.0940673576397972 +1.695073641894982 +2.024326292974333 +2.6460969000409382 +1.9065697033915205 +0.9300635974100604 +0.8842635866758352 +0.047109871837437534 +-0.03808705713161764 +-0.9468524823204914 +-1.5640816106327535 +-1.1406437491731274 +-1.3173586205337986 +-0.3517642722261216 +-1.0267780650505693 +-1.3062920278495374 +-0.61475486311721 +-0.5305975814999264 +-0.5848724165248217 +-0.3350348098032693 +0.6311232708681135 +0.06469165936555121 +1.0148814202244507 +0.4359614874836919 +0.15121122699041634 +-0.6211698553492467 +0.3379544043864523 +-0.1716815356659166 +0.4734235358728961 +0.9181217197691584 +0.07881970554836293 +-0.4603047314179819 +-1.4195689322228495 +-2.0952238977932396 +-1.637757010167247 +-1.7711473166118816 +-2.546112330829766 +-3.5321941826513577 +-3.388444917222274 +-3.0260814383415298 +-3.419140426478375 +-4.2229099481634575 +-4.4621381708078385 +-4.044541262647676 +-4.780143744211969 +-4.780143744211969 +-5.030701230736096 +-4.066259581637756 +-3.3633102140843 +-3.2667583686664767 +-2.5976765220636358 +-1.750943326083714 +-1.500110285477581 +-1.500110285477581 +-2.0128617467341336 +-2.0128617467341336 +-2.1376644266271487 +-2.0557458619636226 +-1.888924888625772 +-2.313084733600353 +-2.4988734658709073 +-2.144474092147449 +-2.023108114472696 +-2.027282678008052 +-2.087465557824687 +-2.3525602130194216 +-1.7103678812912766 +-1.9553951139053565 +-1.3318979439780965 +-1.495016581408433 +-0.637114037320256 +-0.07361850766111822 +-0.7807996057282733 +-0.6167911716599344 +-0.06714777992281085 +-0.10671250336606708 +-0.7841629317834201 +-0.6712744881891756 +-1.5297101461588554 +-1.5297101461588554 +-0.8346721669930954 +-0.4575189014285379 +-0.49549167843486364 +-0.6124473692442043 +-1.39920945619032 +-1.134442224629026 +-0.6585782862359151 +-0.7777903064149333 +-0.7943900808905342 +-0.37452547835719185 +-0.8474155046516448 +-0.8474155046516448 +-0.38508800016725486 +0.2482481138797722 +-0.002125501253954054 +0.07712465119787448 +0.2897081950858347 +-0.21126289568087153 +0.14044982533745132 +-0.5274934143198351 +-1.5006059772111695 +-0.732414945324376 +-0.09846667799607212 +-0.7323724140669485 +-1.2097106757727807 +-1.7102359231855393 +-0.8423409912861717 +-0.1971633064132028 +0.07576504731305511 +0.013808363347172725 +-0.5316760724222444 +-0.8175360915523764 +-1.1052692365971137 +-2.096688425582901 +-1.382319648936193 +-1.7894640954260246 +-1.1979278468295496 +-0.757129901276564 +-0.8780806143325003 +-0.7452031433809855 +-0.4029337312336615 +-0.03830658197346459 +-0.652946582734267 +-0.29819819919067714 +0.2988955567513675 +0.031640001640237836 +0.4262306597804957 +0.6434393443528745 +0.10917825168964335 +1.0294808337939416 +1.942669134960638 +1.9227706188955338 +1.9690123805205317 +1.6938685269454625 +1.6938685269454625 +1.5180055087607838 +1.1725368108387824 +2.034343489627508 +2.6252454081499867 +3.244154386872469 +3.600322318636826 +3.2096884745096994 +3.050939296795309 +2.3522931472547164 +1.4796075742805415 +1.7244718462657953 +2.557979083705898 +2.189139820578501 +2.6265866213602873 +1.639638238437695 +1.8161931622669076 +1.714387515504661 +1.5178428187718418 +0.525922419715942 +-0.10326537237659328 +0.6423704313033347 +0.41762667233266815 +1.3395962954793115 +2.1974880687821563 +1.8544399162464544 +1.8544399162464544 +2.653336328615042 +2.653336328615042 +2.653336328615042 +1.8684752177456887 +2.1018366509192425 +1.3340982867404676 +1.3265303678080085 +0.7910405778512637 +1.7310822318547092 +1.7038699998704656 +1.6466444020860065 +1.602328106830622 +2.363212500104459 +2.1042906419691096 +1.4613767496316015 +1.8154228154126175 +1.7139918588433156 +2.007373828078318 +1.262566832508403 +0.4951378070770114 +0.2321240680744766 +-0.6418450892897968 +-0.763630708147707 +-0.10987141407850975 +-1.0499237095317537 +-1.7027214305202578 +-0.7663622648207116 +-1.3793739340120925 +-1.214537312495616 +-2.195203237657516 +-2.936594054627534 +-3.0506790531288344 +-3.236047863267034 +-3.2615853035192823 +-3.2164919624190107 +-3.924549967122375 +-3.6045317573135893 +-3.5980753847530353 +-4.572751141710021 +-5.024914251623201 +-4.977102315189219 +-4.070434150005523 +-4.070434150005523 +-4.070434150005523 +-4.783055734131603 +-4.972132472776469 +-4.044322674705853 +-3.413051585424406 +-4.036313717169105 +-3.8742405950896566 +-3.383986118890136 +-2.633839098007005 +-2.356611964894566 +-2.4609845744944554 +-2.335637394666497 +-2.4278733743991436 +-1.8768559239653633 +-2.1981218839939247 +-2.059036394750372 +-2.1808159091655988 +-2.079346582992593 +-2.73945344985588 +-3.5782099371117635 +-3.5782099371117635 +-4.326714845080175 +-3.848947506161347 +-3.249011312221353 +-2.530217170941402 +-3.212082460051165 +-2.65238832296028 +-3.420945849521862 +-3.9042672712145396 +-3.9042672712145396 +-3.385099368693556 +-4.350072669812234 +-4.91679902749987 +-4.568714648090372 +-4.601548963009458 +-3.688881014874274 +-2.873512400077643 +-2.336738298284784 +-1.6461008289730825 +-2.3784332285691887 +-3.011935858380605 +-3.3970164057190315 +-4.075609969992499 +-4.181871613230996 +-3.5875722022799588 +-3.5875722022799588 +-3.8507958708502747 +-3.5865850712730833 +-3.566324903567091 +-4.346319057099812 +-5.182276191188434 +-5.182276191188434 +-4.756919100358836 +-4.302188125029772 +-4.355511923691287 +-3.953550718993355 +-3.826354972755486 +-3.6991628567840635 +-2.949298159684659 +-1.9993282861273003 +-1.1914386766333658 +-1.024499733193553 +-1.6999781929764002 +-1.5543496387760345 +-0.6759777363842598 +-0.11962789334845203 +0.34537079809625326 +0.9212793722787371 +1.2034433462734084 +1.2034433462734084 +0.28198296531321976 +1.141727862189351 +0.519255497192399 +0.4322789691453853 +0.5309636690309566 +0.27165008962336246 +0.5641759891212317 +0.1975744939118168 +0.8797854098928358 +-0.11530563417756878 +-0.6121934197394707 +-1.3653531613757057 +-1.806143298680749 +-1.806143298680749 +-0.8398999544616637 +-1.3121679502127246 +-1.0464782526706669 +-0.4544454555203037 +-1.4324772437266549 +-0.7009821189572192 +-0.35498152433725094 +-0.35498152433725094 +-0.10898258846522735 +-0.41631211706761306 +-0.458831769303349 +-0.9979821332579022 +-1.4418800415273476 +-1.4418800415273476 +-2.2014108465091926 +-2.0025613507474285 +-2.371625310146809 +-2.371625310146809 +-2.1321500189563305 +-1.9515931641985709 +-1.5367613366785897 +-1.0686731792219906 +-1.0396199755954045 +-0.5341385652291879 +-0.8703856107851574 +-1.6972948399119727 +-1.0401290948415212 +-1.7880355513183745 +-1.0319613604320232 +-1.445667154961464 +-1.445667154961464 +-1.445667154961464 +-0.4707116218144256 +-1.2785986639461386 +-0.3445091753835796 +-0.1557426221225453 +0.08920032535937739 +0.5876444457358532 +-0.012863609194754488 +0.4468955110916246 +-0.08587944099732314 +0.7735764911671674 +-0.106927443093904 +-0.8371349958445886 +-0.8594487366544895 +-1.3180892841548635 +-0.9036369340246113 +-0.5133458709597654 +0.38276605819232024 +0.7007994104111968 +0.768128480485951 +1.7598280118434313 +1.6170195773412601 +1.3640379634535478 +0.9517816402409626 +0.2650352370696286 +0.05069719516705695 +-0.334936986709076 +-1.123202927315773 +-0.6954420178208818 +-0.8917475460375216 +-0.664094351180346 +0.15570979013024744 +-0.3538548452106506 +-0.03791178860585653 +-0.026173676789628897 +-1.0173789348552065 +-0.2890024518545733 +-0.21243316627022613 +-0.8937528832651775 +-1.4872672031760759 +-1.5626134049824327 +-0.8644696760406299 +-0.9716197392678386 +-1.2308941362491899 +-0.23752703691257082 +-0.48857814422752976 +0.11165013569255244 +-0.13249968832268522 +0.32901227427667035 +1.068597156318959 +0.7231002213605847 +0.052971908955464 +-0.8278413141270554 +-0.2987501934803388 +-1.2324380371226824 +-1.676189063918566 +-2.3614480880248685 +-2.3196050437587377 +-1.641118165763189 +-1.641118165763189 +-1.6425960007462743 +-2.467581483908556 +-1.4814214654312106 +-1.3791119179634295 +-0.48589710630406624 +0.19380913101050834 +1.0374934281030714 +0.0751985902743062 +-0.7405543815843645 +-1.2903663631092746 +-1.8612792446799256 +-1.8612792446799256 +-2.6007387414486822 +-3.5042143705203674 +-3.431008235610582 +-4.252060570241013 +-5.086436444687419 +-5.086436444687419 +-5.266586444361592 +-5.2672823777222195 +-4.534403748112193 +-4.534403748112193 +-4.069598075296398 +-4.069598075296398 +-4.733733547159806 +-4.774302766887362 +-5.553652040555811 +-4.65857353074111 +-4.890047722308146 +-3.9563356710674955 +-3.1493576859057253 +-3.4559923415449667 +-3.7196920680949095 +-2.905214204626973 +-2.9493358286151636 +-3.7724450416780657 +-4.478200508360883 +-4.350529142258734 +-3.604975621316232 +-3.839320643599622 +-2.874435819576495 +-3.7060504987611496 +-3.5151927417149107 +-3.94346565965079 +-3.8395123844412193 +-3.997462143165006 +-3.9837840497174124 +-3.8125656293529744 +-3.194865118403065 +-3.8284301566662813 +-3.0687405656769142 +-3.896709988108491 +-2.982241083125439 +-2.59573776783422 +-2.351560530324014 +-2.8799670160540662 +-3.057539278632636 +-2.3419933145143443 +-3.00695563900324 +-3.5610723235727297 +-2.8155966342842573 +-3.8077590250127606 +-3.092518171946457 +-2.235207775576419 +-1.8454675930931448 +-2.536152173392468 +-1.840868240372226 +-2.608976825925052 +-1.8904546983987673 +-1.6925779609441631 +-1.6925779609441631 +-2.3416372448285387 +-1.7681444918352447 +-1.9633466297966686 +-1.5905702949861176 +-2.196655083122596 +-1.9281340669680689 +-2.3133863857007064 +-1.4601472471385988 +-1.4601472471385988 +-1.1126583036107505 +-1.37712041880719 +-2.05956506856955 +-1.8245704541300565 +-1.970968279859565 +-1.335036240642215 +-1.335036240642215 +-1.2391456570562474 +-2.0381959919227386 +-1.3075183703313498 +-0.8496582314839332 +-0.7660111650029156 +-1.285630724148675 +-0.7784102604579743 +-1.31241918456058 +-2.0189740827423006 +-2.4236183691510647 +-2.00710690977035 +-2.0925158967730777 +-1.3999711179043226 +-1.699455063844323 +-1.45872297697688 +-1.780400478169819 +-1.0507329700001748 +-1.6351630701629545 +-0.87094341055726 +-1.2707512802448524 +-1.6402257107771794 +-1.6199084392523073 +-2.562682637558228 +-2.332550102679808 +-2.7779801079307074 +-2.887780009239339 +-3.3672240632867014 +-4.252454468062506 +-5.088541762230651 +-4.704811497593678 +-3.9770024346682824 +-3.4768835532635025 +-2.8559699339010547 +-3.824096940890911 +-3.6167753620705065 +-3.87063800237131 +-3.451342601718214 +-3.722580518279957 +-4.1290906025641 +-3.327229946942972 +-3.1916354137257112 +-2.950143107522792 +-2.817217793679395 +-2.5823656224543474 +-3.3472358864902585 +-3.3472358864902585 +-2.788290997508485 +-2.379938296977585 +-2.0789261334558056 +-1.5488173509639243 +-0.7481612622358094 +-1.4260975709982777 +-1.493842198042496 +-1.2248089640708801 +-2.0998256437779603 +-2.8315275832234086 +-2.8315275832234086 +-2.2868461189046343 +-1.3420561091218497 +-1.0912371401611398 +-1.9243778070320565 +-1.682048697949511 +-1.9923683265418024 +-1.9923683265418024 +-1.279115314994972 +-1.1718423367626367 +-1.6131265915900008 +-1.7073264061368985 +-1.5640640008499005 +-1.8670913732882988 +-2.166042750231511 +-1.9762342315808532 +-1.2859254122785677 +-0.7098665732303355 +-0.495110294312576 +-1.2418258357301741 +-1.1512405004883612 +-1.9004501888159018 +-2.329522135416656 +-2.7371361438712727 +-2.7066935834692636 +-2.0310712512603915 +-2.876768344075909 +-2.1511544564396115 +-2.2918850229764702 +-2.2121135887798986 +-1.3181600715370783 +-0.6866079940275476 +-0.7612013689360179 +-0.757357961505784 +-0.7253924567776312 +-0.5332898935230092 +-1.170959291552621 +-1.3020936330578943 +-1.932217518064711 +-1.799037891744059 +-1.997649375514615 +-1.3470714875293481 +-0.6409967092813273 +-1.184851021881765 +-1.3682420529686898 +-1.8992890506476152 +-1.0204318071349159 +-1.1607974468537017 +-1.3247211402500527 +-0.8163569507014528 +-1.0145197795910321 +-0.12120986288603208 +0.40305362924098964 +0.9776015112508811 +0.7204985626205843 +1.197398128354887 +2.1009865476673117 +1.9277461770390176 +1.7506811055409668 +0.9329547409650336 +0.12527172930542907 +-0.26356433967660775 +0.13532782688172718 +0.04473188925820537 +-0.6965279303543375 +-0.009737447161013213 +-0.009737447161013213 +0.6368937213686945 +1.094823317441565 +0.11723394181598734 +-0.17603355189172853 +-0.7525385042274343 +-0.7814779311587583 +-1.318713506621871 +-0.5021203799304836 +-0.9001626005320519 +-1.3997523466833077 +-1.8971154450956047 +-1.5122101996780541 +-2.165206765592531 +-1.8025727827218285 +-2.5368428323737904 +-2.839582934234858 +-3.3301843725057414 +-2.683611424631616 +-2.161224785776146 +-3.048126503707329 +-2.7429484568790428 +-2.892886108021644 +-2.892886108021644 +-2.5116469141024256 +-2.0535129051046055 +-2.030325805086706 +-1.0339310385304104 +-0.40035821318949627 +-0.869663729399423 +-0.5950122200784059 +-0.1854461504344268 +-0.6010468066146173 +-1.2794261753380856 +-0.9238280144081672 +-0.7528943756494748 +-0.43741198568216966 +-0.5317627328540454 +-1.18737152544387 +-1.1862312100763583 +-1.3201659662532812 +-0.3432732964476022 +-0.49910019083377277 +-0.5258736135337541 +-0.018388887462551295 +-0.6935739066377975 +-0.6935739066377975 +0.09079248905752801 +0.5761264198942548 +-0.2760164362443551 +0.3413241999727916 +-0.003944876414059384 +-0.9187311406577944 +-1.4921405648705979 +-2.429713126178835 +-2.213649463265358 +-1.5937237181443262 +-2.4209860141848045 +-2.4209860141848045 +-1.5454853142546467 +-2.4881410848879146 +-1.8549646740185801 +-2.3119703351509084 +-2.664037134143962 +-2.55001962158983 +-3.4684759678395087 +-2.8330366347189697 +-3.276600357445333 +-3.36285112970077 +-2.671352139143608 +-2.671352139143608 +-2.671352139143608 +-3.03857089789547 +-2.9237725280400246 +-2.9237725280400246 +-2.6476445278500496 +-2.6913774372312362 +-2.845030318718436 +-2.404248239596313 +-2.379282103616352 +-2.71767568703849 +-2.8508874609143184 +-3.573021681746381 +-3.0948901110476075 +-2.2610655705909624 +-1.8369895825521578 +-1.323137505760216 +-0.4880587333520596 +-0.1433061571347496 +0.4097268956258575 +-0.5025215840092168 +-0.40937365235318524 +-1.090155629092548 +-1.3652980533043886 +-1.7892116292337805 +-1.1362115351543811 +-0.16685662083791097 +-0.5537387376719706 +-0.2406558199361294 +-1.0346132341420526 +-1.5834528156194325 +-1.1229364330974614 +-0.6499459581426903 +-0.2558580336447853 +-1.0592479097270258 +-1.7934014569961214 +-1.7882213296778173 +-1.7882213296778173 +-1.7882213296778173 +-2.630157924310147 +-2.381283690998636 +-2.3162700337583013 +-3.092364163782052 +-2.939576695920956 +-2.8260086625291945 +-2.717608011177588 +-2.7259023784367726 +-3.636593751428194 +-3.057632827645192 +-3.0045896147735975 +-2.8969578642861893 +-2.24916110499545 +-1.5019704458636056 +-1.733245748430985 +-0.7367529892412679 +0.15423231297114848 +0.7437574060622096 +0.9767107332841083 +0.918631218454634 +0.9209433223822284 +0.07865528093500307 +-0.34324123543664364 +0.31618791306383587 +0.2629992038801069 +-0.12108034924916322 +0.2498298907389389 +-0.4723109159080914 +0.09797777923121886 +-0.3605194071495935 +0.057725579713506 +-0.8665993465524541 +-1.409579819957103 +-0.6477831259235687 +-0.914586515214599 +-0.8426751671894818 +-0.7908555462276051 +-0.8711309991722915 +0.021820463905348975 +0.7740027138022489 +0.8271383924503302 +0.2340596907946355 +0.9524823625448382 +0.3740991244181431 +0.4967598928799364 +0.4967598928799364 +0.6100442289855557 +1.3559180379717555 +0.5699742931804936 +0.29750913967078907 +0.34698902792780884 +0.5034246574251763 +1.3193365100709014 +0.4820225181590445 +0.6321569308670627 +0.004470538863486029 +-0.027037828606733982 +0.9699845056412711 +0.683706230952579 +1.4853507858468313 +0.6661419104276785 +-0.27305655491150893 +-1.0889529938494449 +-0.3101976686650927 +0.603599753519048 +-0.3731253914265382 +0.2875828780889813 +-0.14267164453048775 +-0.6998358929247518 +-0.10123671375321097 +-0.10123671375321097 +0.6446408784380512 +0.5142106156097606 +0.38698497442315827 +0.320017151445698 +0.10842435147020846 +0.2791238455332409 +0.95921090135356 +1.4087560840494437 +0.8046713181858958 +0.9893380072501639 +1.863608868293928 +1.6294809544820028 +1.2507435939571017 +1.8925555409901624 +1.8925555409901624 +1.8925555409901624 +2.018536990213465 +2.9571011694972187 +2.7211176711391074 +2.7569291543686036 +3.142889082586394 +3.654851254903113 +3.670759477520277 +2.975870765861205 +2.1834758793368088 +2.627278235418137 +2.4488740545406635 +2.453868806274862 +2.0716587592712834 +2.7249213933173078 +1.9414269821664374 +1.9414269821664374 +2.2291727557262413 +2.2291727557262413 +2.0865016191680015 +1.818625199568999 +1.7242703046019292 +2.4230839489187055 +2.992211180819776 +2.384349236107239 +1.8059337659310124 +1.4164271752916568 +1.8520600673818501 +1.9064227800075952 +2.462209429232755 +2.799093800621681 +3.6950252612441172 +2.8144581166109908 +2.8144581166109908 +2.061743307048137 +2.367300295704667 +1.3825398165773504 +2.344783979828625 +2.344783979828625 +1.428777785219196 +2.373286910949922 +2.373286910949922 +2.8212890199613385 +2.2002593844884704 +2.2002593844884704 +1.2550970811888336 +1.2550970811888336 +0.9147686401735474 +0.4946358787746714 +0.8825237912923385 +-0.0017880132816845418 +-0.35456673094714775 +-1.0607711074652797 +-1.8752071913140487 diff --git a/spec/cnn_spec.cr b/spec/cnn_spec.cr index 8493b2b..5cadfb4 100644 --- a/spec/cnn_spec.cr +++ b/spec/cnn_spec.cr @@ -76,91 +76,181 @@ describe SHAInet::CNN do # end # - it "Figure out MNIST (mini-batch train, mse)" do - # Load training data (partial dataset) - raw_data = Array(Array(Float64)).new - csv = CSV.new(File.read(__DIR__ + "/test_data/mnist_train.csv")) - 1000.times do - # CSV.each_row(File.read(__DIR__ + "/test_data/mnist_train.csv")) do |row| - csv.next - new_row = Array(Float64).new - csv.row.to_a.each { |value| new_row << value.to_f64 } - raw_data << new_row - end - raw_input_data = Array(Array(Float64)).new - raw_output_data = Array(Array(Float64)).new - - raw_data.each do |row| - raw_input_data << row[1..-1] - raw_output_data << [row[0]] - end - - training_data = SHAInet::CNNData.new(raw_input_data, raw_output_data) - training_data.for_mnist_conv - training_data.data_pairs.shuffle! - - # puts "#{training_data.data_pairs.first[:output]}" - # training_data.data_pairs.first[:input].first.each do |row| - # puts "#{row}" - # end - - # Load test data (partial dataset) - raw_data = Array(Array(Float64)).new - csv = CSV.new(File.read(__DIR__ + "/test_data/mnist_test.csv")) - 100.times do - csv.next - new_row = Array(Float64).new - csv.row.to_a.each { |value| new_row << value.to_f64 } - raw_data << new_row - end - - raw_input_data = Array(Array(Float64)).new - raw_output_data = Array(Array(Float64)).new - - raw_data.each do |row| - raw_input_data << row[1..-1] - raw_output_data << [row[0]] - end - - test_data = SHAInet::CNNData.new(raw_input_data, raw_output_data) - test_data.for_mnist_conv - - cnn = SHAInet::CNN.new - cnn.add_input([height = 28, width = 28, channels = 1]) # Output shape = 28x28x1 - cnn.add_conv( - filters_num: 10, - window_size: 5, - stride: 1, - padding: 2, - activation_function: SHAInet.none) # Output shape = 28x28x20 - cnn.add_relu(0.01) # Output shape = 28x28x20 - cnn.add_fconnect(l_size: 10, activation_function: SHAInet.sigmoid) - cnn.add_softmax - - cnn.learning_rate = 0.005 - cnn.momentum = 0.02 - - # cnn.run(test_data.data_pairs.first[:input], stealth = false) - cnn.train_batch( - data: training_data.data_pairs, - training_type: :sgdm, - cost_function: :mse, - epochs: 3, - error_threshold: 0.0001, - log_each: 1, - mini_batch_size: 50) - - correct_answers = 0 - test_data.data_pairs.each do |data_point| - result = cnn.run(data_point[:input], stealth: true) - if (result.index(result.max) == data_point[:output].index(data_point[:output].max)) - correct_answers += 1 - end - end - cnn.inspect("activations") - puts "We managed #{correct_answers} out of #{test_data.data_pairs.size} total" - puts "Cnn output: #{cnn.output}" - end + # it "Figure out MNIST (mini-batch train, mse)" do + # # Load training data (partial dataset) + # raw_data = Array(Array(Float64)).new + # csv = CSV.new(File.read(__DIR__ + "/test_data/mnist_train.csv")) + # 1000.times do + # # CSV.each_row(File.read(__DIR__ + "/test_data/mnist_train.csv")) do |row| + # csv.next + # new_row = Array(Float64).new + # csv.row.to_a.each { |value| new_row << value.to_f64 } + # raw_data << new_row + # end + # raw_input_data = Array(Array(Float64)).new + # raw_output_data = Array(Array(Float64)).new + + # raw_data.each do |row| + # raw_input_data << row[1..-1] + # raw_output_data << [row[0]] + # end + + # training_data = SHAInet::CNNData.new(raw_input_data, raw_output_data) + # training_data.for_mnist_conv + # training_data.data_pairs.shuffle! + + # # puts "#{training_data.data_pairs.first[:output]}" + # # training_data.data_pairs.first[:input].first.each do |row| + # # puts "#{row}" + # # end + + # # Load test data (partial dataset) + # raw_data = Array(Array(Float64)).new + # csv = CSV.new(File.read(__DIR__ + "/test_data/mnist_test.csv")) + # 100.times do + # csv.next + # new_row = Array(Float64).new + # csv.row.to_a.each { |value| new_row << value.to_f64 } + # raw_data << new_row + # end + + # raw_input_data = Array(Array(Float64)).new + # raw_output_data = Array(Array(Float64)).new + + # raw_data.each do |row| + # raw_input_data << row[1..-1] + # raw_output_data << [row[0]] + # end + + # test_data = SHAInet::CNNData.new(raw_input_data, raw_output_data) + # test_data.for_mnist_conv + + # cnn = SHAInet::CNN.new + # cnn.add_input([height = 28, width = 28, channels = 1]) # Output shape = 28x28x1 + # cnn.add_conv( + # filters_num: 10, + # window_size: 5, + # stride: 1, + # padding: 2, + # activation_function: SHAInet.none) # Output shape = 28x28x20 + # cnn.add_relu(0.01) # Output shape = 28x28x20 + # cnn.add_fconnect(l_size: 10, activation_function: SHAInet.none) + # cnn.add_softmax + + # cnn.learning_rate = 0.05 + # cnn.momentum = 0.02 + + # # cnn.run(test_data.data_pairs.first[:input], stealth = false) + # cnn.train_batch( + # data: training_data.data_pairs, + # training_type: :sgdm, + # cost_function: :c_ent, + # epochs: 10, + # error_threshold: 0.0001, + # log_each: 1, + # mini_batch_size: 50) + + # correct_answers = 0 + # test_data.data_pairs.each do |data_point| + # result = cnn.run(data_point[:input], stealth: true) + # if (result.index(result.max) == data_point[:output].index(data_point[:output].max)) + # correct_answers += 1 + # end + # end + # # cnn.inspect("activations") + # puts "We managed #{correct_answers} out of #{test_data.data_pairs.size} total" + # puts "Cnn output: #{cnn.output}" + # end + + # it "Figure out MNIST (mini-batch train, cross-entropy)" do + # puts "Figure out MNIST (mini-batch train, cross-entropy)" + # # Load training data (partial dataset) + # raw_data = Array(Array(Float64)).new + # csv = CSV.new(File.read(__DIR__ + "/test_data/mnist_train.csv")) + # 1000.times do + # # CSV.each_row(File.read(__DIR__ + "/test_data/mnist_train.csv")) do |row| + # csv.next + # new_row = Array(Float64).new + # csv.row.to_a.each { |value| new_row << value.to_f64 } + # raw_data << new_row + # end + # raw_input_data = Array(Array(Float64)).new + # raw_output_data = Array(Array(Float64)).new + + # raw_data.each do |row| + # raw_input_data << row[1..-1] + # raw_output_data << [row[0]] + # end + + # training_data = SHAInet::CNNData.new(raw_input_data, raw_output_data) + # training_data.for_mnist_conv + # training_data.data_pairs.shuffle! + + # # puts "#{training_data.data_pairs.first[:output]}" + # # training_data.data_pairs.first[:input].first.each do |row| + # # puts "#{row}" + # # end + + # # Load test data (partial dataset) + # raw_data = Array(Array(Float64)).new + # csv = CSV.new(File.read(__DIR__ + "/test_data/mnist_test.csv")) + # 100.times do + # csv.next + # new_row = Array(Float64).new + # csv.row.to_a.each { |value| new_row << value.to_f64 } + # raw_data << new_row + # end + + # raw_input_data = Array(Array(Float64)).new + # raw_output_data = Array(Array(Float64)).new + + # raw_data.each do |row| + # raw_input_data << row[1..-1] + # raw_output_data << [row[0]] + # end + + # test_data = SHAInet::CNNData.new(raw_input_data, raw_output_data) + # test_data.for_mnist_conv + + # cnn = SHAInet::CNN.new + # cnn.add_input([height = 28, width = 28, channels = 1]) # Output shape = 28x28x1 + # cnn.add_conv( + # filters_num: 10, + # window_size: 5, + # stride: 1, + # padding: 2, + # activation_function: SHAInet.none) # Output shape = 28x28x20 + # cnn.add_relu(0.01) # Output shape = 28x28x20 + # cnn.add_fconnect(l_size: 10, activation_function: SHAInet.sigmoid) + # cnn.add_softmax + + # cnn.learning_rate = 0.005 + # cnn.momentum = 0.02 + + # # cnn.run(test_data.data_pairs.first[:input], stealth = false) + + # cnn.train_es( + # data: training_data.data_pairs, + # pool_size: 50, + # learning_rate: 0.2, + # sigma: 0.3, + # cost_function: :c_ent, + # epochs: 10, + # mini_batch_size: 1, + # error_threshold: 0.00001, + # log_each: 1) + + # correct_answers = 0 + # test_data.data_pairs.each do |data_point| + # result = cnn.run(data_point[:input], stealth: true) + # if (result.index(result.max) == data_point[:output].index(data_point[:output].max)) + # correct_answers += 1 + # end + # end + # cnn.inspect("activations") + # puts "We managed #{correct_answers} out of #{test_data.data_pairs.size} total" + # puts "Cnn output: #{cnn.output}" + # end end # Remove train data diff --git a/spec/linear_data/.~lock.data.csv# b/spec/linear_data/.~lock.data.csv# deleted file mode 100644 index f87136c..0000000 --- a/spec/linear_data/.~lock.data.csv# +++ /dev/null @@ -1 +0,0 @@ -,art,art-ThinkPad-P51s-W10DG,21.05.2018 13:30,file:///home/art/.config/libreoffice/4; \ No newline at end of file diff --git a/spec/network_spec.cr b/spec/network_spec.cr index 7b07150..2b9848f 100644 --- a/spec/network_spec.cr +++ b/spec/network_spec.cr @@ -5,6 +5,27 @@ require "csv" system("cd #{__DIR__}/test_data && tar xvf tests.tar.xz") describe SHAInet::Network do + it "Initialize" do + nn = SHAInet::Network.new + nn.should be_a(SHAInet::Network) + end + + it "saves_to_file" do + nn = SHAInet::Network.new + nn.add_layer(:input, 2, :memory, SHAInet.sigmoid) + nn.add_layer(:output, 2, :memory, SHAInet.sigmoid) + nn.add_layer(:hidden, 2, :memory, SHAInet.sigmoid) + nn.fully_connect + nn.save_to_file("./my_net.nn") + File.exists?("./my_net.nn").should eq(true) + end + + it "loads_from_file" do + nn = SHAInet::Network.new + nn.load_from_file("./my_net.nn") + (nn.all_neurons.size > 0).should eq(true) + end + it "Test on a linear regression model" do # data structures to hold the input and results inputs = Array(Array(Float64)).new @@ -34,7 +55,7 @@ describe SHAInet::Network do model.learning_rate = 0.01 # train the network using Stochastic Gradient Descent with momentum - model.train(training.raw_data, :sgdm, :mse, 5000, 0.0, 100) + model.train(training.raw_data, :adam, :mse, 5000, 0.0, 1) # model.show @@ -48,27 +69,6 @@ describe SHAInet::Network do (error < 0.05).should eq(true) # require less than 5% error end - it "Initialize" do - nn = SHAInet::Network.new - nn.should be_a(SHAInet::Network) - end - - it "saves_to_file" do - nn = SHAInet::Network.new - nn.add_layer(:input, 2, :memory, SHAInet.sigmoid) - nn.add_layer(:output, 2, :memory, SHAInet.sigmoid) - nn.add_layer(:hidden, 2, :memory, SHAInet.sigmoid) - nn.fully_connect - nn.save_to_file("./my_net.nn") - File.exists?("./my_net.nn").should eq(true) - end - - it "loads_from_file" do - nn = SHAInet::Network.new - nn.load_from_file("./my_net.nn") - (nn.all_neurons.size > 0).should eq(true) - end - it "Figure out XOR with SGD + M" do puts "---" puts "Figure out XOR SGD + momentum (train, mse, sigmoid)" @@ -163,19 +163,35 @@ describe SHAInet::Network do inputs << row_arr outputs << label[row[-1]] end - normalized = SHAInet::TrainingData.new(inputs, outputs) - normalized.normalize_min_max + + data = SHAInet::TrainingData.new(inputs, outputs) + data.normalize_min_max + + training_data, test_data = data.split(0.9) # Split also shuffles iris.train_batch( - data: normalized.data.shuffle, + data: training_data, training_type: :rprop, cost_function: :mse, epochs: 5000, error_threshold: 0.000001, log_each: 1000) - result = iris.run(normalized.normalized_inputs.first) - ((result.first < 0.3) && (result[1] < 0.3) && (result.last > 0.7)).should eq(true) + # Test the trained model + correct = 0 + test_data.data.each do |data_point| + result = iris.run(data_point[0], stealth: true) + expected = data_point[1] + # puts "result: \t#{result.map { |x| x.round(5) }}" + # puts "expected: \t#{expected}" + error_sum = 0.0 + result.size.times do |i| + error_sum += (result[i] - expected[i]).abs + end + correct += 1 if error_sum < 0.3 + end + puts "Correct answers: (#{correct} / #{test_data.size})" + (correct > 10).should eq(true) end it "works on iris dataset with batch train with Adam (batch)" do @@ -205,19 +221,35 @@ describe SHAInet::Network do inputs << row_arr outputs << label[row[-1]] end - normalized = SHAInet::TrainingData.new(inputs, outputs) - normalized.normalize_min_max + + data = SHAInet::TrainingData.new(inputs, outputs) + data.normalize_min_max + + training_data, test_data = data.split(0.9) # Split also shuffles iris.train_batch( - data: normalized.data.shuffle, + data: training_data, training_type: :adam, cost_function: :mse, epochs: 20000, - error_threshold: 0.000001, + error_threshold: 0.00001, log_each: 1000) - result = iris.run(normalized.normalized_inputs.first) - ((result.first < 0.3) && (result[1] < 0.3) && (result.last > 0.9)).should eq(true) + # Test the trained model + correct = 0 + test_data.data.each do |data_point| + result = iris.run(data_point[0], stealth: true) + expected = data_point[1] + # puts "result: \t#{result.map { |x| x.round(5) }}" + # puts "expected: \t#{expected}" + error_sum = 0.0 + result.size.times do |i| + error_sum += (result[i] - expected[i]).abs + end + correct += 1 if error_sum < 0.3 + end + puts "Correct answers: (#{correct} / #{test_data.size})" + (correct > 10).should eq(true) end it "works on iris dataset with mini-batch train with Adam (mini-batch)" do @@ -247,11 +279,71 @@ describe SHAInet::Network do inputs << row_arr outputs << label[row[-1]] end - normalized = SHAInet::TrainingData.new(inputs, outputs) - normalized.normalize_min_max + data = SHAInet::TrainingData.new(inputs, outputs) + data.normalize_min_max + + training_data, test_data = data.split(0.9) # Split also shuffles + + iris.train_batch( + data: training_data, + training_type: :adam, + cost_function: :mse, + epochs: 5000, + error_threshold: 0.000001, + mini_batch_size: 10, + log_each: 1000) + + # Test the trained model + correct = 0 + test_data.data.each do |data_point| + result = iris.run(data_point[0], stealth: true) + expected = data_point[1] + # puts "result: \t#{result.map { |x| x.round(5) }}" + # puts "expected: \t#{expected}" + error_sum = 0.0 + result.size.times do |i| + error_sum += (result[i] - expected[i]).abs + end + correct += 1 if error_sum < 0.3 + end + puts "Correct answers: (#{correct} / #{test_data.size})" + (correct > 10).should eq(true) + end + + it "trains , saves, loads, runs" do + puts "---" + puts "train, save, loads and run works (Adam, mini-batch_train, mse, sigmoid)" + label = { + "setosa" => [0.to_f64, 0.to_f64, 1.to_f64], + "versicolor" => [0.to_f64, 1.to_f64, 0.to_f64], + "virginica" => [1.to_f64, 0.to_f64, 0.to_f64], + } + iris = SHAInet::Network.new + iris.add_layer(:input, 4, :memory, SHAInet.sigmoid) + iris.add_layer(:hidden, 4, :memory, SHAInet.sigmoid) + iris.add_layer(:output, 3, :memory, SHAInet.sigmoid) + iris.fully_connect + + iris.learning_rate = 0.7 + iris.momentum = 0.3 + + outputs = Array(Array(Float64)).new + inputs = Array(Array(Float64)).new + CSV.each_row(File.read(__DIR__ + "/test_data/iris.csv")) do |row| + row_arr = Array(Float64).new + row[0..-2].each do |num| + row_arr << num.to_f64 + end + inputs << row_arr + outputs << label[row[-1]] + end + data = SHAInet::TrainingData.new(inputs, outputs) + data.normalize_min_max + + training_data, test_data = data.split(0.9) # Split also shuffles iris.train_batch( - data: normalized.data.shuffle, + data: training_data, training_type: :adam, cost_function: :mse, epochs: 5000, @@ -259,118 +351,214 @@ describe SHAInet::Network do mini_batch_size: 50, log_each: 1000) - result = iris.run(normalized.normalized_inputs.first) - ((result.first < 0.3) && (result[1] < 0.3) && (result.last > 0.9)).should eq(true) + iris.save_to_file("./my_net.nn") + nn = SHAInet::Network.new + nn.load_from_file("./my_net.nn") + + # Test the trained model + correct = 0 + test_data.data.each do |data_point| + result = iris.run(data_point[0], stealth: true) + expected = data_point[1] + # puts "result: \t#{result.map { |x| x.round(5) }}" + # puts "expected: \t#{expected}" + error_sum = 0.0 + result.size.times do |i| + error_sum += (result[i] - expected[i]).abs + end + correct += 1 if error_sum < 0.3 + end + puts "Correct answers: (#{correct} / #{test_data.size})" + (correct > 10).should eq(true) end - # it "trains , saves, loads, runs" do - # puts "---" - # puts "train, save, loads and run works (Adam, mini-batch_train, mse, sigmoid)" - # label = { - # "setosa" => [0.to_f64, 0.to_f64, 1.to_f64], - # "versicolor" => [0.to_f64, 1.to_f64, 0.to_f64], - # "virginica" => [1.to_f64, 0.to_f64, 0.to_f64], - # } - # iris = SHAInet::Network.new - # iris.add_layer(:input, 4, :memory, SHAInet.sigmoid) - # iris.add_layer(:hidden, 4, :memory, SHAInet.sigmoid) - # iris.add_layer(:output, 3, :memory, SHAInet.sigmoid) - # iris.fully_connect - - # iris.learning_rate = 0.7 - # iris.momentum = 0.3 - - # outputs = Array(Array(Float64)).new - # inputs = Array(Array(Float64)).new - # CSV.each_row(File.read(__DIR__ + "/test_data/iris.csv")) do |row| - # row_arr = Array(Float64).new - # row[0..-2].each do |num| - # row_arr << num.to_f64 - # end - # inputs << row_arr - # outputs << label[row[-1]] - # end - # normalized = SHAInet::TrainingData.new(inputs, outputs) - # normalized.normalize_min_max - - # iris.train_batch( - # data: normalized.data.shuffle, - # training_type: :adam, - # cost_function: :mse, - # epochs: 5000, - # error_threshold: 0.000001, - # mini_batch_size: 50, - # log_each: 1000) - - # iris.save_to_file("./my_net.nn") - # nn = SHAInet::Network.new - # nn.load_from_file("./my_net.nn") - # result = nn.run(normalized.normalized_inputs.first) - # ((result.first < 0.3) && (result[1] < 0.3) && (result.last > 0.9)).should eq(true) - # end + it "Works with cross-entropy" do + puts "---" + puts "Works with cross-entropy (sgdm, mini-batch_train, cross-entropy)" + label = { + "setosa" => [0.to_f64, 0.to_f64, 1.to_f64], + "versicolor" => [0.to_f64, 1.to_f64, 0.to_f64], + "virginica" => [1.to_f64, 0.to_f64, 0.to_f64], + } + iris = SHAInet::Network.new + iris.add_layer(:input, 4, :memory, SHAInet.sigmoid) + iris.add_layer(:hidden, 4, :memory, SHAInet.sigmoid) + iris.add_layer(:output, 3, :memory, SHAInet.sigmoid) + iris.fully_connect + + iris.learning_rate = 0.7 + iris.momentum = 0.3 + + outputs = Array(Array(Float64)).new + inputs = Array(Array(Float64)).new + CSV.each_row(File.read(__DIR__ + "/test_data/iris.csv")) do |row| + row_arr = Array(Float64).new + row[0..-2].each do |num| + row_arr << num.to_f64 + end + inputs << row_arr + outputs << label[row[-1]] + end + data = SHAInet::TrainingData.new(inputs, outputs) + data.normalize_min_max + + training_data, test_data = data.split(0.9) # Split also shuffles - # it "works on the mnist dataset using adam and batch" do + iris.train_batch( + data: training_data, + training_type: :sgdm, + cost_function: :c_ent, + epochs: 100, + error_threshold: 0.000001, + mini_batch_size: 50, + log_each: 10) + + # Test the trained model + correct = 0 + test_data.data.each do |data_point| + result = iris.run(data_point[0], stealth: true) + expected = data_point[1] + # puts "result: \t#{result.map { |x| x.round(5) }}" + # puts "expected: \t#{expected}" + error_sum = 0.0 + result.size.times do |i| + error_sum += (result[i] - expected[i]).abs + end + correct += 1 if error_sum < 0.3 + end + puts "Correct answers: (#{correct} / #{test_data.size})" + (correct > 10).should eq(true) + end + + it "works on iris dataset using evolutionary strategies as optimizer + cross-entropy" do + puts "---" + # puts "works on iris dataset using evolutionary strategies as optimizer + cross-entropy" + label = { + "setosa" => [0.to_f64, 0.to_f64, 1.to_f64], + "versicolor" => [0.to_f64, 1.to_f64, 0.to_f64], + "virginica" => [1.to_f64, 0.to_f64, 0.to_f64], + } + + iris = SHAInet::Network.new + iris.add_layer(:input, 4, :memory, SHAInet.sigmoid) + iris.add_layer(:hidden, 4, :memory, SHAInet.sigmoid) + iris.add_layer(:output, 3, :memory, SHAInet.sigmoid) + iris.fully_connect + + outputs = Array(Array(Float64)).new + inputs = Array(Array(Float64)).new + CSV.each_row(File.read(__DIR__ + "/test_data/iris.csv")) do |row| + row_arr = Array(Float64).new + row[0..-2].each do |num| + row_arr << num.to_f64 + end + inputs << row_arr + outputs << label[row[-1]] + end + data = SHAInet::TrainingData.new(inputs, outputs) + data.normalize_min_max + + training_data, test_data = data.split(0.9) + + iris.train_es( + data: training_data, + pool_size: 50, + learning_rate: 0.5, + sigma: 0.1, + cost_function: :c_ent, + epochs: 500, + mini_batch_size: 15, + error_threshold: 0.00000001, + log_each: 100, + show_slice: true) + + # Test the trained model + correct = 0 + test_data.data.each do |data_point| + result = iris.run(data_point[0], stealth: true) + expected = data_point[1] + # puts "result: \t#{result.map { |x| x.round(5) }}" + # puts "expected: \t#{expected}" + error_sum = 0.0 + result.size.times do |i| + error_sum += (result[i] - expected[i]).abs + end + correct += 1 if error_sum < 0.3 + end + puts "Correct answers: (#{correct} / #{test_data.size})" + (correct > 10).should eq(true) + end + + # it "works on the mnist dataset using evolutionary optimizer and batch" do # mnist = SHAInet::Network.new # mnist.add_layer(:input, 784, "memory", SHAInet.sigmoid) - # mnist.add_layer(:hidden, 100, "memory", SHAInet.sigmoid) - # mnist.add_layer(:hidden, 40, "eraser", SHAInet.sigmoid) - # mnist.add_layer(:hidden, 40, "memory", SHAInet.sigmoid) - # mnist.add_layer(:hidden, 100, "memory", SHAInet.sigmoid) + # mnist.add_layer(:hidden, 50, "memory", SHAInet.sigmoid) + # # mnist.add_layer(:hidden, 40, "eraser", SHAInet.sigmoid) + # # mnist.add_layer(:hidden, 10, "memory", SHAInet.sigmoid) + # # mnist.add_layer(:hidden, 100, "memory", SHAInet.sigmoid) # mnist.add_layer(:output, 10, "memory", SHAInet.sigmoid) # # Input to first hidden - # mnist.connect_ltl(mnist.input_layers.first, mnist.hidden_layers.first, :full) - - # # first hidden to [1] and [2] - # mnist.connect_ltl(mnist.hidden_layers.first, mnist.hidden_layers[1], :full) - # mnist.connect_ltl(mnist.hidden_layers.first, mnist.hidden_layers[2], :full) - - # # [1] and [2] to last hidden - # mnist.connect_ltl(mnist.hidden_layers[1], mnist.hidden_layers.last, :full) - # mnist.connect_ltl(mnist.hidden_layers[2], mnist.hidden_layers.last, :full) - - # # [0] & [3] to output - # mnist.connect_ltl(mnist.hidden_layers[0], mnist.output_layers.first, :full) - # mnist.connect_ltl(mnist.hidden_layers[3], mnist.output_layers.first, :full) - - # # Load train data - # outputs = Array(Array(Float64)).new - # inputs = Array(Array(Float64)).new - # CSV.each_row(File.read(__DIR__ + "/test_data/mnist_train.csv")) do |row| - # row_arr = Array(Float64).new - # row[1..-1].each do |num| - # row_arr << num.to_f64 - # end - # inputs << row_arr - # a = Array(Float64).new(10, 0.0) - # a[row[0].to_i] = 1.0 - # outputs << a + # mnist.fully_connect + + # # Load training data + # raw_data = Array(Array(Float64)).new + # csv = CSV.new(File.read(__DIR__ + "/test_data/mnist_train.csv")) + # 10000.times do + # # CSV.each_row(File.read(__DIR__ + "/test_data/mnist_train.csv")) do |row| + # csv.next + # new_row = Array(Float64).new + # csv.row.to_a.each { |value| new_row << value.to_f64 } + # raw_data << new_row + # end + # raw_input_data = Array(Array(Float64)).new + # raw_output_data = Array(Array(Float64)).new + + # raw_data.each do |row| + # raw_input_data << row[1..-1] + # raw_output_data << [row[0]] # end - # normalized = SHAInet::TrainingData.new(inputs, outputs) - # normalized.normalize_min_max + + # training_data = SHAInet::TrainingData.new(raw_input_data, raw_output_data) + # # training_data.normalize_min_max + # training_data.normalized_inputs = training_data.normalize_min_max(data: training_data.inputs) + # training_data.normalized_outputs = training_data.to_onehot(data: training_data.outputs, vector_size: 10) + # # Train on the data - # mnist.train_batch(normalized.data.shuffle, :adam, :mse, 100, 0.0035, 10, 10000) + # mnist.train_es( + # data: training_data, + # pool_size: 50, + # learning_rate: 0.5, + # sigma: 0.1, + # cost_function: :c_ent, + # epochs: 10, + # mini_batch_size: 100, + # error_threshold: 0.00000001, + # log_each: 10, + # show_slice: true) # # Load test data - # outputs = Array(Array(Float64)).new - # inputs = Array(Array(Float64)).new - # results = Array(Int32).new - # CSV.each_row(File.read(__DIR__ + "/test_data/mnist_test.csv")) do |row| - # row_arr = Array(Float64).new - # row[1..-1].each do |num| - # row_arr << num.to_f64 - # end - # inputs << row_arr - # a = Array(Float64).new(10, 0.0) - # a[row[0].to_i] = 1.0 - # outputs << a + # raw_data = Array(Array(Float64)).new + # csv = CSV.new(File.read(__DIR__ + "/test_data/mnist_test.csv")) + # 1000.times do + # # CSV.each_row(File.read(__DIR__ + "/test_data/mnist_train.csv")) do |row| + # csv.next + # new_row = Array(Float64).new + # csv.row.to_a.each { |value| new_row << value.to_f64 } + # raw_data << new_row # end - # normalized = SHAInet::TrainingData.new(inputs, outputs) - # normalized.normalize_min_max - # # Run on all test data, and see that we are atleast 0.01 far from the right solution - # normalized.normalized_inputs.each_with_index do |test, i| - # result = mnist.run(test, stealth = true) - # if (result.index(result.max) == normalized.normalized_outputs[i].index(normalized.normalized_outputs[i].max)) + # raw_input_data = Array(Array(Float64)).new + # raw_output_data = Array(Array(Float64)).new + + # test_data = SHAInet::TrainingData.new(raw_input_data, raw_output_data) + # test_data.normalized_inputs = test_data.normalize_min_max(data: test_data.inputs) + # test_data.normalized_outputs = test_data.to_onehot(data: test_data.outputs, vector_size: 10) + + # # Run on all test data + # results = Array(Int32).new + # test_data.normalized_inputs.each_with_index do |test, i| + # result = mnist.run(input: test, stealth: true) + # if (result.index(result.max) == test_data.normalized_outputs[i].index(test_data.normalized_outputs[i].max)) # results << 1 # else # results << 0 @@ -379,5 +567,6 @@ describe SHAInet::Network do # puts "We managed #{results.sum} out of #{results.size} total" # end end + # Remove train data system("cd #{__DIR__}/test_data && rm *.csv") diff --git a/src/shainet/basic/data.cr b/src/shainet/basic/data.cr index f43d01f..f242f28 100644 --- a/src/shainet/basic/data.cr +++ b/src/shainet/basic/data.cr @@ -6,8 +6,8 @@ module SHAInet @ymax : Int32 @ymin : Int32 - getter :normalized_outputs, :normalized_inputs, :labels - setter :outputs + property :normalized_outputs, :normalized_inputs, :labels, :outputs + getter :inputs # @data_pairs : # Takes a path to a CSV file, a range of inputs and the index of the target column. @@ -64,7 +64,20 @@ module SHAInet @inputs.each_with_index do |i_arr, i| arr << [@inputs[i], @outputs[i]] end - arr + return arr + end + + def normalize_min_max(data : Array(Array(Float64))) + normalized_data = Array(Array(Float64)).new + + # Get min-max + data.transpose.each { |a| @i_max << a.max; @i_min << a.min } + + data.each do |row| + normalized_data << normalize_inputs(row) + end + + return normalized_data end def normalize_min_max @@ -128,10 +141,17 @@ module SHAInet # Splits the receiver in a TrainingData and a TestData object according to factor def split(factor) training_set_size = (data.size * factor).to_i + + # puts data shuffled_data = data.shuffle + + # puts shuffled_data + training_set = shuffled_data[0..training_set_size - 1] test_set = shuffled_data[training_set_size..shuffled_data.size - 1] + # puts training_set + @logger.info "Selected #{training_set.size} / #{data.size} rows for training" training_data = SHAInet::TrainingData.new(training_set.map { |el| el[0] }, training_set.map { |el| el[1] }) training_data.labels = @labels @@ -161,5 +181,20 @@ module SHAInet index = an_array.index(an_array.max.to_f64) index ? @labels[index] : "" end + + def size + return @inputs.size + end + + def to_onehot(data : Array(Array(Float64)), vector_size : Int32) + data.each_with_index do |point, i| + lbl = point.first.clone.to_i + one_hot = Array(Float64).new(vector_size) { 0.0 } + one_hot[lbl] = 1.0 + data[i] = one_hot + end + + return data + end end end diff --git a/src/shainet/basic/es.cr b/src/shainet/basic/es.cr new file mode 100644 index 0000000..501d99b --- /dev/null +++ b/src/shainet/basic/es.cr @@ -0,0 +1,148 @@ +# Note: this type of optimization was inspired by the following paper: +# https://blog.openai.com/evolution-strategies/ + +module SHAInet + class Pool + getter organisms : Array(Organism), pool_biases : Array(Float64), pool_weights : Array(Float64) + + # property mvp : Organism + + def initialize(@network : Network, + @pool_size : Int32, + @learning_rate : Float64, + @sigma : Float64) + # + raise "Pool size must be at least 2" if @pool_size < 2 + + # Store previous data to avoid moving towards worse network states + @pool_biases = Array(Float64).new + @network.all_neurons.each { |neuron| @pool_biases << neuron.bias } + + @pool_weights = Array(Float64).new + @network.all_synapses.each { |synapse| @pool_weights << synapse.weight } + + @organisms = Array(Organism).new + @pool_size.times do + @organisms << Organism.new( + network: @network, + learning_rate: @learning_rate, + sigma: @sigma, + original_biases: @pool_biases, + original_weights: @pool_weights + ) + end + # @mvp = @organisms.sample.as(Organism) + end + + def normalize_rewards + reward_mean = 0.0 + reward_stdv = 0.0 + + # Calculate mean + @organisms.each do |organism| + reward_mean += organism.reward + end + reward_mean /= @organisms.size + + # Calculate standard deviation + @organisms.each do |organism| + reward_stdv += ((organism.reward - reward_mean)**2 / (@organisms.size - 1))**0.5 + end + + @organisms.each do |organism| + organism.reward = (organism.reward.clone - reward_mean) / reward_stdv + end + end + + def pull_params + normalize_rewards + norm_value = @learning_rate / (@pool_size * @sigma) + # puts "norm_value: #{norm_value}" + + # Sum the relative change each organism provides + @organisms.each do |organism| + organism.biases.each_with_index do |bias, i| + weighted_value = bias * organism.reward + @pool_biases[i] += norm_value * weighted_value + # puts "i: #{i}" + # puts "organism.error_signal: #{organism.error_signal}" + # puts "organism.reward: #{organism.reward}" + # puts "bias: #{bias}" + # puts "weighted_value: #{weighted_value}" + end + + organism.weights.each_with_index do |weight, i| + weighted_value = weight * organism.reward + @pool_weights[i] += norm_value * weighted_value + end + end + + # puts "@pool_biases: #{@pool_biases}" + + # Update network biases + @network.all_neurons.each_with_index do |neuron, i| + neuron.bias = @pool_biases[i].clone + end + + # Update network weights + @network.all_synapses.each_with_index do |synapse, i| + synapse.weight = @pool_weights[i].clone + end + end + end + + class Organism + property reward : Float64 + getter mse : Float64, error_signal : Array(Float64) + getter biases : Array(Float64), weights : Array(Float64) + + @network : Network + @learning_rate : Float64 + @sigma : Float64 + @original_biases : Array(Float64) + @original_weights : Array(Float64) + + def initialize(@network : Network, + @learning_rate : Float64, + @sigma : Float64, + original_biases : Array(Float64), + original_weights : Array(Float64)) + @mse = 0.0 + @reward = 0.0 + @error_signal = [] of Float64 + + @original_biases = original_biases.clone + @original_weights = original_weights.clone + @biases = original_biases.clone + @weights = original_weights.clone + end + + def get_new_params + # Update biases + @network.all_neurons.each_with_index do |neuron, i| + new_value = SHAInet::RandomNormal.sample(n: 1, mu: neuron.bias, sigma: @sigma).first + neuron.bias = new_value.clone + @biases[i] = new_value.clone + end + + # Update weights + @network.all_synapses.each_with_index do |synapse, i| + new_value = SHAInet::RandomNormal.sample(n: 1, mu: synapse.weight, sigma: @sigma).first + synapse.weight = new_value + @weights[i] = new_value + end + end + + def update_reward + @error_signal = @network.error_signal.clone + @reward = 0.0 + @error_signal.each { |v| @reward -= v } + + # puts "###############" + # puts "@network.prev_mse: #{@network.prev_mse}" + # puts "@mse: #{@mse}" + # puts "@reward: #{@reward}" + # puts "###############" + end + end +end diff --git a/src/shainet/basic/network.cr b/src/shainet/basic/network.cr index 2dd094f..8a5faaf 100644 --- a/src/shainet/basic/network.cr +++ b/src/shainet/basic/network.cr @@ -14,14 +14,14 @@ module SHAInet # General network parameters getter :input_layers, :output_layers, :hidden_layers, :all_neurons, :all_synapses - getter error_signal : Array(Float64), total_error : Float64, :mean_error, w_gradient : Array(Float64), b_gradient : Array(Float64) + getter error_signal : Array(Float64), total_error : Float64, :mse, w_gradient : Array(Float64), b_gradient : Array(Float64) # Parameters for SGD + Momentum property learning_rate : Float64, momentum : Float64 # Parameters for Rprop property etah_plus : Float64, etah_minus : Float64, delta_max : Float64, delta_min : Float64 - getter prev_mean_error : Float64 + getter prev_mse : Float64 # Parameters for Adam property alpha : Float64 @@ -36,18 +36,18 @@ module SHAInet @all_synapses = Array(Synapse).new # Array of all current synapses in the network @error_signal = Array(Float64).new # Array of errors for each neuron in the output layers, based on specific input @total_error = Float64.new(1) # Sum of errors from output layer, based on a specific input - @mean_error = Float64.new(1) # MSE of netwrok, based on all errors of output layer for a specific input or batch + @mse = Float64.new(1) # MSE of netwrok, based on all errors of output layer for a specific input or batch @w_gradient = Array(Float64).new # Needed for batch train @b_gradient = Array(Float64).new # Needed for batch train @learning_rate = 0.005 # Standard parameter for GD @momentum = 0.05 # Improved GD - @etah_plus = 1.2 # For iRprop+ , how to increase step size - @etah_minus = 0.5 # For iRprop+ , how to decrease step size - @delta_max = 50.0 # For iRprop+ , max step size - @delta_min = 0.1 # For iRprop+ , min step size - @prev_mean_error = rand(0.001..1.0).to_f64 # For iRprop+ , needed for backtracking + @etah_plus = 1.2 # For iRprop+ , how to increase step size + @etah_minus = 0.5 # For iRprop+ , how to decrease step size + @delta_max = 50.0 # For iRprop+ , max step size + @delta_min = 0.1 # For iRprop+ , min step size + @prev_mse = Float64.new(1) # For iRprop+ , needed for backtracking @alpha = 0.001 # For Adam , step size (recomeneded: only change this hyper parameter when fine-tuning) @beta1 = 0.9 # For Adam , exponential decay rate (not recommended to change value) @@ -256,6 +256,18 @@ module SHAInet raise NeuralNetRunError.new("Error in evaluate: #{e}") end + # Calculate MSE from the error signal of the output layer + def update_mse + if @error_signal.size == 1 + error_avg = 0.0 + else + error_avg = @total_error/@output_layers.last.neurons.size + end + sqrd_dists = 0.0 + @error_signal.each { |e| sqrd_dists += (e - error_avg)**2 } + @mse = sqrd_dists/@output_layers.last.neurons.size + end + def verify_data(data : Array(Array(Array(GenNum)))) message = nil if data.sample.size != 2 @@ -281,7 +293,7 @@ module SHAInet end def log_summary(e) - @logger.info("Epoch: #{e}, Total error: #{@total_error}, MSE: #{@mean_error}") + @logger.info("Epoch: #{e}, Total error: #{@total_error}, MSE: #{@mse}") end # Online train, updates weights/biases after each data point (stochastic gradient descent) @@ -298,12 +310,12 @@ module SHAInet if e % log_each == 0 log_summary(e) end - if e >= epochs || (error_threshold >= @mean_error) && (e > 0) + if e >= epochs || (error_threshold >= @mse) && (e > 0) log_summary(e) break end - # Change String/Symbol into the corrent proc + # Change String/Symbol into the corrent proc of the cost function if cost_function.is_a?(Symbol) || cost_function.is_a?(String) raise NeuralNetRunError.new("Must define correct cost function type (:mse, :c_ent, :exp, :hel_d, :kld, :gkld, :ita_sai_d).") if COST_FUNCTIONS.any? { |x| x == cost_function.to_s } == false proc = get_cost_proc(cost_function.to_s) @@ -313,35 +325,23 @@ module SHAInet # Go over each data point and update the weights/biases based on the specific example data.each do |data_point| # Update error signal, error gradient and total error at the output layer based on current input - # puts "Data-point: #{data_point} [[input], [expected]]" evaluate(data_point[0], data_point[1], cost_function) + update_mse - # Propogate the errors backwards through the hidden layers + # Propogate the errors backwards @hidden_layers.reverse_each do |l| l.neurons.each { |neuron| neuron.hidden_error_prop } # Update neuron error based on errors*weights of neurons from the next layer end - # Propogate the errors backwards through the input layers @input_layers.reverse_each do |l| l.neurons.each { |neuron| neuron.hidden_error_prop } # Update neuron error based on errors*weights of neurons from the next layer end - # Calculate MSE - if @error_signal.size == 1 - error_avg = 0.0 - else - error_avg = @total_error/@output_layers.last.neurons.size - end - sqrd_dists = [] of Float64 - @error_signal.each { |e| sqrd_dists << (e - error_avg)**2 } - sqr_sum = sqrd_dists.reduce { |acc, i| acc + i } - @mean_error = sqr_sum/@output_layers.last.neurons.size - # Update all wieghts & biases update_weights(training_type, batch = false) update_biases(training_type, batch = false) - @prev_mean_error = @mean_error + @prev_mse = @mse.clone end end rescue e : Exception @@ -364,26 +364,27 @@ module SHAInet batch_size = mini_batch_size ? mini_batch_size : raw_data.size @time_step = 0 - # Change String/Symbol into the corrent proc + # Change String/Symbol into the corrent proc of the cost function if cost_function.is_a?(Symbol) || cost_function.is_a?(String) raise NeuralNetRunError.new("Must define correct cost function type (:mse, :c_ent, :exp, :hel_d, :kld, :gkld, :ita_sai_d).") if COST_FUNCTIONS.any? { |x| x == cost_function.to_s } == false proc = get_cost_proc(cost_function.to_s) cost_function = proc end - raw_data.each_slice(batch_size, reuse = false) do |data_slice| - verify_data(data_slice) - @logger.info("Working on mini-batch size: #{batch_size}") if mini_batch_size - @time_step += 1 if mini_batch_size # in mini-batch update adam time_step - loop do |e| - if e % log_each == 0 - log_summary(e) - # @all_neurons.each { |s| puts s.gradient } - end - if e >= epochs || (error_threshold >= @mean_error) && (e > 1) - log_summary(e) - break - end + loop do |e| + if e % log_each == 0 + log_summary(e) + # @all_neurons.each { |s| puts s.gradient } + end + if e >= epochs || (error_threshold >= @mse) && (e > 1) + log_summary(e) + break + end + + raw_data.each_slice(batch_size, reuse = false) do |data_slice| + verify_data(data_slice) + # @logger.info("Working on mini-batch size: #{batch_size}") if mini_batch_size + @time_step += 1 if mini_batch_size # in mini-batch update adam time_step batch_mean = [] of Float64 all_errors = [] of Float64 @@ -418,8 +419,8 @@ module SHAInet sqrd_dists = [] of Float64 @error_signal.each { |e| sqrd_dists << (e - error_avg)**2 } - @mean_error = (sqrd_dists.reduce { |acc, i| acc + i })/@output_layers.last.neurons.size - batch_mean << @mean_error + @mse = (sqrd_dists.reduce { |acc, i| acc + i })/@output_layers.last.neurons.size + batch_mean << @mse end # Total error per batch @@ -427,14 +428,14 @@ module SHAInet # Calculate MSE per batch batch_mean = (batch_mean.reduce { |acc, i| acc + i })/data_slice.size - @mean_error = batch_mean + @mse = batch_mean # Update all wieghts & biases for the batch @time_step += 1 unless mini_batch_size # Based on how many epochs have passed in current training run, needed for Adam update_weights(training_type, batch = true) update_biases(training_type, batch = true) - @prev_mean_error = @mean_error + @prev_mse = @mse.clone end end end @@ -469,7 +470,7 @@ module SHAInet elsif synapse.prev_gradient*synapse.gradient < 0.0 delta = [@etah_minus*synapse.prev_delta, @delta_min].max - synapse.weight -= synapse.prev_delta_w if @mean_error >= @prev_mean_error + synapse.weight -= synapse.prev_delta_w if @mse >= @prev_mse synapse.prev_gradient = 0.0 synapse.prev_delta = delta @@ -522,7 +523,7 @@ module SHAInet elsif neuron.prev_gradient*neuron.gradient < 0.0 delta = [@etah_minus*neuron.prev_delta, @delta_min].max - neuron.bias -= neuron.prev_delta_b if @mean_error >= @prev_mean_error + neuron.bias -= neuron.prev_delta_b if @mse >= @prev_mse neuron.prev_gradient = 0.0 neuron.prev_delta = delta @@ -548,16 +549,114 @@ module SHAInet end end + # Use evolutionary strategies for network optimization instread of gradient based approach + def train_es(data : Array(Array(Array(GenNum))) | SHAInet::TrainingData, # Input structure: data = [[Input = [] of Float64],[Expected result = [] of Float64]] + pool_size : Int32, # How many random direction to try each time + learning_rate : Float64, # How much of the noise i used for the parameter update + sigma : Float64, # Range of noise values + cost_function : Symbol | String | CostFunction = :c_ent, # Proc returns the function value and it's derivative + epochs : Int32 = 1, # a criteria of when to stop the training + mini_batch_size : Int32 = 1, # Size of batch + error_threshold : Float64 = 0.0, # a criteria of when to stop the training + log_each : Int32 = 1, # determines what is the step for error printout + show_slice : Bool = false) # Show MSE for each slice + # This methods accepts data as either a SHAInet::TrainingData object, or as an Array(Array(Array(GenNum)). + # In the case of SHAInet::TrainingData, we convert it to an Array(Array(Array(GenNum)) by calling #data on it. + raw_data = data.is_a?(SHAInet::TrainingData) ? data.data : data + @logger.info("Training started") + batch_size = mini_batch_size ? mini_batch_size : raw_data.size + + # Change String/Symbol into the corrent proc of the cost function + if cost_function.is_a?(Symbol) || cost_function.is_a?(String) + raise NeuralNetRunError.new("Must define correct cost function type (:mse, :c_ent, :exp, :hel_d, :kld, :gkld, :ita_sai_d).") if COST_FUNCTIONS.any? { |x| x == cost_function.to_s } == false + proc = get_cost_proc(cost_function.to_s) + cost_function = proc + end + + loop do |e| + if e >= epochs || (error_threshold >= @mse) && (e > 1) + log_summary(e) + break + end + + # Show training progress of epochs + if e % log_each == 0 + log_summary(e) + end + + # Counters for disply + i = 0 + slices = data.size / mini_batch_size + + # Temp + biases = [] of Float64 + weights = [] of Float64 + + raw_data.each_slice(batch_size, reuse = false) do |data_slice| + verify_data(data_slice) + + pool = Pool.new( + network: self, + pool_size: pool_size, + learning_rate: learning_rate, + sigma: sigma) + + # Update wieghts & biases for the batch + pool.organisms.each do |organism| + organism.get_new_params # Get new weights & biases + + # Go over each data points and collect errors + # based on each specific example in the batch + batch_mse_sum = 0.0 + batch_errors_sum = Array(Float64).new(@output_layers.last.neurons.size) { 0.0 } + + data_slice.each do |data_point| + # Update error signal in output layer + evaluate(data_point[0], data_point[1], cost_function) + update_mse + batch_mse_sum += @mse + @error_signal.size.times { |i| batch_errors_sum[i] += @error_signal[i] } + end + + @mse = (batch_mse_sum / mini_batch_size) # Update MSE of the batch + @error_signal = batch_errors_sum + organism.update_reward + end + + pool.pull_params + + # Show training progress of the mini-batches + i += 1 + if e % log_each == 0 + @logger.info("Slice: (#{i} / #{slices}), MSE: #{@mse}") if show_slice + # @logger.info("@error_signal: #{@error_signal}") + end + end + end + end + def randomize_all_weights raise NeuralNetRunError.new("Cannot randomize weights without synapses") if @all_synapses.empty? @all_synapses.each &.randomize_weight end def randomize_all_biases - raise NeuralNetRunError.new("Cannot randomize biases without synapses") if @all_synapses.empty? + raise NeuralNetRunError.new("Cannot randomize biases without neurons") if @all_synapses.empty? @all_neurons.each &.randomize_bias end + def get_cost_proc(function_name : String) : CostFunction + case function_name + when "mse" + return SHAInet.quadratic_cost + when "c_ent" + # raise MathError.new("Cross entropy cost is not implemented fully yet, please use quadratic cost for now.") + return SHAInet.cross_entropy_cost + else + raise NeuralNetInitalizationError.new("Must choose correct cost function or provide a correct Proc") + end + end + def save_to_file(file_path : String) dump_network = Array(Hash(String, String | Array(Hash(String, Array(Hash(String, String | Float64)) | Float64 | String | String)))).new @@ -654,17 +753,6 @@ module SHAInet @logger.info("Network loaded from: #{file_path}") end - def get_cost_proc(function_name : String) : CostFunction - case function_name - when "mse" - return SHAInet.quadratic_cost - when "c_ent" - raise MathError.new("Cross entropy cost is not implemented fully yet, please use quadratic cost for now.") - else - raise NeuralNetInitalizationError.new("Must choose correct cost function or provide a correct Proc") - end - end - def inspect @logger.info(@input_layers) @logger.info("--------------------------------") diff --git a/src/shainet/cnn/cnn.cr b/src/shainet/cnn/cnn.cr index a3c6c37..5a8e663 100644 --- a/src/shainet/cnn/cnn.cr +++ b/src/shainet/cnn/cnn.cr @@ -348,7 +348,8 @@ module SHAInet when "mse" return SHAInet.quadratic_cost when "c_ent" - raise MathError.new("Cross entropy cost is not implemented fully yet, please use quadratic cost for now.") + # raise MathError.new("Cross entropy cost is not implemented fully yet, please use quadratic cost for now.") + return SHAInet.cross_entropy_cost else raise NeuralNetInitalizationError.new("Must choose correct cost function or provide a correct Proc") end diff --git a/src/shainet/basic/functions.cr b/src/shainet/math/functions.cr similarity index 89% rename from src/shainet/basic/functions.cr rename to src/shainet/math/functions.cr index f14f757..552acbe 100644 --- a/src/shainet/basic/functions.cr +++ b/src/shainet/math/functions.cr @@ -137,9 +137,12 @@ module SHAInet } end - # def self.quadratic_cost_derivative : Proc(GenNum, GenNum, Float64) - # ->(expected : GenNum, actual : GenNum) { _quadratic_cost_derivative(expected.to_f64, actual.to_f64) } - # end + def self.cross_entropy_cost : CostFunction + ->(expected : GenNum, actual : GenNum) { + {value: _cross_entropy_cost(expected.to_f64, actual.to_f64), + derivative: _cross_entropy_cost_derivative(expected.to_f64, actual.to_f64)} + } + end # # Cost functions # # @@ -147,32 +150,24 @@ module SHAInet return (0.5*(actual - expected)**2).to_f64 end - def self.cross_entropy_cost(expected : Float64, actual : Float64) : Float64 - raise MathError.new("Cross entropy cost is not implemented fully yet, please use quadratic cost for now.") - # a = ((-1)*((expected*Math.log((actual), Math::E) + (1.0 - expected)*Math.log((1.0 - actual), Math::E))**2)**0.5).to_f64 - # if a.to_s.match(/(-NaN|NaN|Infinity)/i) - # return 0.0 - # else - # return a - # end + def self._cross_entropy_cost(expected : Float64, actual : Float64) : Float64 + # raise MathError.new("Cross entropy cost is not implemented fully yet, please use quadratic cost for now.") + if expected == 1.0 + return (-1)*Math.log((actual), Math::E) + elsif expected == 0.0 + return (-1)*Math.log((1.0 - actual), Math::E) + else + raise MathError.new("Expected value must be 0 or 1 for cross entropy cost.") + end end # # Derivatives of cost functions # # - def self._quadratic_cost_derivative(expected : Float64, actual : Float64) : Float64 return (actual - expected).to_f64 end - def self.cross_entropy_cost_derivative(expected : Float64, actual : Float64) : Float64 - if actual == expected == 0.0 || actual == expected == 1.0 - a = 0.0 - elsif actual == 0.0 && expected != 0.0 - a = -1.0 - else - a = ((actual - expected)/((1.0 - actual)*actual)).to_f64 - end - # puts a - return a + def self._cross_entropy_cost_derivative(expected : Float64, actual : Float64) : Float64 + return (actual - expected).to_f64 end ################################################################## diff --git a/src/shainet/math/random_normal.cr b/src/shainet/math/random_normal.cr new file mode 100644 index 0000000..0e7b98e --- /dev/null +++ b/src/shainet/math/random_normal.cr @@ -0,0 +1,56 @@ +require "csv" + +module SHAInet + module RandomNormal + extend self + + # Normal probability density function calculation + def pdf(x : Float64, mu : Float64, sigma : Float64) + max_y = Float64.new((1 / Math.sqrt(2 * Math::PI * sigma**2))) + exp = Float64.new(Math::E**(-1 * (x - mu)**2 / (2 * sigma**2))) + return max_y*exp + end + + # Sampling n points from a normal distribution with mu & sigma, + # using the Metropolis-Hastings algorithm + def metropolis(n : Int32 = 1, mu : Float64 = 0.0, sigma : Float64 = 1.0) + points = Array(Float64).new + r = mu + p = pdf(x: r, mu: mu, sigma: sigma) + + n.times do + rn = r.clone + rand(-1.0..1.0) + pn = pdf(x: rn, mu: mu, sigma: sigma) + + if pn >= p + p = pn.clone + r = rn.clone + else + u = rand(1.0) + if u < (pn / p) + p = pn.clone + r = rn.clone + end + end + points << r + end + + return points + end + + # alias_method :sample, :metropolis + def sample(n : Int32 = 1, mu : Float64 = 0.0, sigma : Float64 = 1.0) + raise "Parameter error, sampling must be of n >= 1" if n < 1 + return metropolis(n: n, mu: mu, sigma: sigma) + end + end +end + +data = SHAInet::RandomNormal.sample(10000, 0.0, 3.0) +csv_file = CSV.build do |csv| + data.each do |value| + csv.row value + end +end + +File.write("csv_file.csv", csv_file)