erlang-src-23.3.4.19-150300.3.14.1<>,Lxep9|)cTx7yrLaȘMIŞ{@ZئYZd0H|9|Me_Mƅ w W7-F^΄NȔ|(ed/X_ُݍ zz=PR!b]08䤳Azzdtmnő)cyMRXB&iMg.?i QagcyC $OQrY 5Et>wYQDqx<>;&?&d  % E .9 OkD  & 9 [Y `r~\|( 8(_9_: _FuFGu`HIXxY\]d^UbcdIeNfQlSuhv% z&+&<&@&F&Cerlang-src23.3.4.19150300.3.14.1Erlang/OTP applications sourcesErlang sources for all the applications in the Erlang/OTP system. They are useful for educational purpose and as a base for creating embedded systems.eibs-power9-13hSUSE Linux Enterprise 15SUSE LLC Apache-2.0https://www.suse.com/Development/Languages/Otherhttp://www.erlang.orglinuxppc64le.4 `1-0W77)R 9M&i^-/ @"X l !,% S?MJXh*LW'>B{9;  _'Vk+| 0'-G*IY'.\8m o> I4,$BUa uj ( 7#A $>)<>2E-9D~1Sz @|@B-$M'! dp=29 ;f6Aa>6 RZ`-+ҷ; {30XSEk=ńX 9<Oi%: ,, !nZdsr'M@9+ /k* R [ xJ i  H n  $W GP,-}a$bW&g ;k#cf:@"7 8O TBC o:p  #8 lswE 2kwX*#MRVa QcZ=( O.} :#%H H&X 3 >2&%MA-~#bt `c &WM ;_ Ba{7%'Sm z#JLx*!)*m%-;A ".K&\!CK >+835 R8+W6 8 1R?3O I+1T=EMNDu,7+ "?&q|/8+g B0 38lqV9H 6vdRu?'6Dp | %"aHHP (@W7Y,X&;3n7K-O/@: @*$*/-TzVY 9%7(bLbDlRv ]fk4##o&8c;"Rwl'5QD-7r-s]Y#]Y#m&q"R'5#& )pz{O(;X k786*YV [' EC/ZA l$X2GPVJKU]4QZFJMX(TLU; ?K:T=R.-),Gt P = ( CZz+AA52h4S 4~P(! ` }w)F {zByL"4dQ:Mr$ |uT`v $s! UZ+Dr$, q|i_1 P3`lF 0 'm%vM*Fuv%(x+W X|#7, Mh\7#3b5o&I o&'?l/ 9ny}g= >Tk)TeCs(@d : M3(@a"\t7|M?)`(%,AhP0ec '=Bu:۴cfJ<lQ{@5U=! \`3P( 50 o2<`Y-8#7T+pR6hc Y=J|./_6@u*&9u :! t4'F Z j7?y @*V='"O%~9$C8 PX  +?S;f U,gVTs%;3 K>NfoBS%8 A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeAeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeff1da69d5135c19fb3bcaf77d96c656a110cb35f4649e68ecaafc083662679875c87f7665f41317c772dfbb3babb52c273e51c60764bfc84b8ac85a1e51ca8dff26b07308a520b43e268e1e9cb1645a381fc6f2cebee0adc27396792528b1dfb1da68eacc3dd3f868075493e4b5e97d1edd03e22acdee9470d3559c233d5207d7981a55ca11489f3428c48c77d6684e65a727b8dc8abf9ddd6b34bfe0fc56024bb5b87ec11bbb605fad9fc80bab2a28383ee9dfca3d6e1f6518f9996f67d7affec5c1ce8824706831a1655130c3c7c739e810249c37663275f2d9b884ea11878e0cfe932ce07e6ef83e2e44a10a64713686e00699c7856957328139536a06eef7262ad782da8f6cdf1365c9a35374a9f978daee264d79ec2befc7b46fbc59fdc8088933935c827233aa6bcac2be0702008829ab1a4bcd8c074ccdcfa6ffeac7750af1f8e85b2fd5112c721e03cd7091d76a3d8c6840b6ee1df30c6be9b4e9b826b5d26c2c4215bd8e058f2b86128ba46832402e072a742835ef020ad032ce3d49ac04e7dab02bd340cc280c8333c369e23708fb679c6bc6727fa54de8ca66b1df889b5fb65b90169d7d39ea37bab0bafa5e532d5badfc34be4f229e9bbfb49524cf2527592847c91f7d51b6a39df8d6895c364950b1ef4cbe786e5a878b91a68fdf1ae6a5d833b38e54ba75bcedd99f5a67db6526dd9664404859a3d0c788d1343ad4b51b1e242b72faa2b174ac56e095717195ab0966f053a2e8c09dc5953f6a9920c4e6012646b91254a4d8ea7cfb95cd003130f5570029571473adf7dd853edff134e026cee8af937664f9c3dfa562056821db7642d4e5d4e8c7ac9b5052acbd11cc00a7093aa76c90b3d0a48b5a5f861397678b80e20cdbc1a8b6b848bb1582579f09d1d4a95aa5e698ba83dcbb2af877a886a8ba2268441f2f430903f3ae4182f47d07da64998c3f4fbb4235e92b461ea364d2c3ed1c828c9cda5f8c4c69ee091ee52dd32c54f87316f7e225dec34bdb111c92c54524dbb9c95297e5c7b15f9814feb0a9acf9f6242aed7b866e747fe3c48a9ce7d48d0c908a5c754ce3e91b142a0d1cf72275e67035d76068d43b082dd4fd2fd29500e52a732b4189410090ca5d362f90bb3790cb241e5f1102b8e37ef63f0fea0a3576d278de17553dccccbf23a1207e0c5b67041dd59507420202f6c41a255e128ba513d3a86e103459283ef77781ceaf2b2f8e4a16ab71e892cfec54fb5f023d5ce368389ae9f6a61ff3a669608fc25cf3e00247cea660fe207f030c3097993102874a2177d7a1737eaae6f7421afce501cfec943edf86c5a4c8125500ea1319f1b2c96799fc67869129c8db75a283b7fe730e0e4363e9a8688aa8f0547899d04621559999c6c6be555d4e86df62bb8d376bbbb6a352bd6dc1018a8a70a8e032b0bdb3a48af043ce4fba16eb9aeea34fa3b4989922f9d9fe5251a5dec4ddad5a9aa49d48aa759c00c0e59a84d15fcaabab617233f205554285f3605765e61852e50ae7c7fd3647be3d0cfb7e168f577066c1af423868e87e03775001d09e50474771b14b0016dda5033a51486f3c583e826b614bd2577ebb8b17818e3d88354cdc679a14010cac71445e0f5adec76c1b5df7a33b9c962cdb04b993c3b87b5da702328a4c814f2da1c33eb44403da8965c72a0988a73df39609615177c64ce10e6975f061b5706d86fc5d3296345f2b204babd5af56a91ab73d8b7407b46d952dae11c53fe97273b4d91561a470627fcc992c87436ac0b7c51e0ea8c0b619ecb1ec5e3007bc76302c96203c54dffb6db3dd1c65654fe65cede075738b96c5cd417089340d44bc55e5fa50a64ab47f1621161e7863e1efb180799d1498c85f0d99e74f4a41c248713a321ebf8b022649cefb5c74cfa789d40cf35e3e9939f9ccece4d69f8fbedf63eb00d2cdf0568173de3e02dbb33705b60ea38a78337c5f300595fa950207736c439b1da2be47872a914571b9f1fb0ad7a2b7ed2ecd621a6fdca357ce6d1fc251e0c00e60bee0a011aa61743bf8ee1ace0af1f691d67654f1a7109d58381904ee5076729b15437683e39d00bcb15bb8e35419704d7b00f23d1e0bfbd36fed00a3053341a907e1859dbbbe229aa0654a0ead4bfed2132f8fe1dc4f209c81c7c14a6eadb5f494b9926c03c383d9a635c0d6a476835c9ae8d92cf7fc5e68ee82aeda62b89c95d1975bda382ef36401686e688c7bf093937a00ffc3aef4d82fbb5da95adc86ee982a256a2aa4224bb3dd2097d47b3d02655f6dbb6e756d0934e7089f077cf468b3343d290e41388b060c9622e8e70875b967c82c45e38fa9dff868a7ddb2f80b474f47c00fa2206d9e3377a5544ec17d13cfde0948e150047babfd3515dddf9e36f2e1cbcf36ce6481bc4a244ce306d1469e7d489fb3febeeb6d8d82a6b1e3aa9c3af5688de9e9c424f17f43cc7139c23c7284e2c5f895d88d359a572c874cea41a31bb7eadeef6a866da33c176b6f455a55478723eb11f22ceb9b260fcb7a68aa8e1833dc173aed4aae5bb18ae831407d93835fcd6a733a531983937aaa84b0a5bfed7520a0516478f58decc7a2cfb06fbe71c7df05519fa3efd3b0c41bd29dd316eba700d9297821e103ac05371e05fa708afe190fd5967f22ba8f0b44ef7d51d472549af4ad4d27d60653385bdd2ebc35bd3c1e054fe0962ca40d4222c1b54828afccaf6c373c9cf7e6323d18722e6e8ca36cca18a04f50ca09b6956cc3f3155dc288d6747ffffb996062d29e9d6c6e09747d69af2cea23979d5a18025f8e53c275b9c01bde46505c398ade7d4429fb15065443c5da32c01e8f61265dcc240686b1f5af2d619268d5fea437530eee79848f24a46e777a3c47410f5b27afad53f9a9b53970f39d6aba608e596c57cae9351dfaa77e28d670f1d07aba3ba6e0968ff6fba0045a5fbc1f9400b0b14e961e5b606fca4b86650899d0e9f140ca572185e352e8676e99fac11b04cedc0f0911706f54f8c065ea1b3a7474fc0fcde103c95e89991c8283ce2f5aa745852a679295baecd7b4f8bc3b43081496e96d0873c0f7bc415fe1f692ca3663b488708501db4acc7196a73ef4619e0e559d113afd691cb05f26dd637b63d79ad3d1687aa59efd33c308f7a549a7a3401a6991e8d0d69b788c8e3c08b5d026e1a5de6fca840f819d4778274af88b48a14e7f81d872a87eb5e09515aab0acd0d24a42dd95c39bcd041248b13e36d320864fb886cfcec80b2b588a006acdc363333689d2b23fc3738b099ec94a32a8f24d74d0fd51b000266cc7c608fe571696e09889d86d511bc278bfe3ddea2e344f7c14738d317736a64eacce7efd2dee88209f4186df3ff9561b20156a464e6040729a0c4479500010f19955c7db6adc919492d80d28e073c7af0f1b8e3233cdcdee2371706ab0975080a571a1a28063119a35daa265d7462f8fe9f15278cbd27bacab3f9a15e35ebce2256857ed1fbe7b18f70923a1e4d17870db329a12794b35a616818513bd64a026feca61c53f1a30f6679c7c782cebe0e235fa8590a26a61cfb2bb86ad89c4aecec6d668d994d4dc3059f536ffc2adfa2b5bd3dceeec3161836486fb7f1bd8bef98d4457ba0cab5d05254fbef6c986a45839ad3f29ffed53c167fc7feec78fb3fac93fff0823843171c15da14a6ba9c09f5aaecfdb0d91c0414753496e4929efec2af2803bba2de13e3187485fb82b767fbf07b6115b43b73c7ef7e1e10268c71335f96f1a8ffe926e7e295b707f1987aa2d301ba16b133e008e3b282ed4bf86f71c8dc619a0b2b96bfa72309354545973f5e3bf559755b8b51043c66fa993611227bea4c8d5a3967b3c9184fdb51d8e08ef2c9ebc153f5c33ed5f7fdac579a93841a2bd29756a4b13c31184d5e6770cf54dd113d3db78af8a522f2ddce1bc165ef0f93de9ce2e8d7dd801103026182e97e61490156b91a9ed83f0173b4785cd4f799d22b7cdf75b5854a25a95ef2b3fbc94ac3b15b1ea5cf960d9df6c7cf657ae17275212c53c8138b5839c27bb53c6a5652824467a16ad3345acc2282bf08b1774f6a08dbd690bf882550bb6f93745c23fd483bf4300582ab9e38568c1db1a61bd7ec28bc880d91e0028f71808a603908d8d4a872884caaefe864aa14c78e7a8ee1a02d10cee069b18cd06c0fddf900c2a4742f4e2d3e06e33fd5f1a5243c777f342aa1085434c017adee976f2263a95973e9947acf7789546967e015fa34919ca3295620e9867e5b98d8556b5b42f119f5232501a8ff1e9c99acf227a7c7658a8bbf01a2c6c2e7102c46641ee3e2e9faff93cba080a5a443a3f5f6513b0d2d55472944ecb5655df9ab50a5615c580279f154039e85b92b527f9c7ae9f5bba30ed82ad60f14fb603ae80421dfb56bb527ee724880fad8ad68fbaab75d821ef003c877f1d6d5a83425568a20b6432db9155d53914f8807c5948eb170155d2c28589b8754ddd7c181d066e48a47c837d092a56ecbfd2874346c0bf7c03459457f3c9a814863b3dd6143dd1f41214e9344ab6378badae60a2fcec0b9b84ddb0935431d89969e9785a8909e558ae4431d6d87694083e2ba827dce14edb4fff359b1362c04061aad669fdad873d13305052aabcc3ac93a016080dc52a9dbd96b921e7bf2ea4d8a934369e9804b28ad60d1fd63b42d201989677336c1a3122f62a6b6bda1d788ab8d805f33b33f8d36a390e2b2304e1a623115fa771c6eab1feb9874511f47fa0f33dd5795040d84fd177482e038da4497a7305c5b035847e0d0ff43048a9897b24ed0c3f5916d2a4a6ec4db7cc54f82ee1166ff9a919b2b736022ea383941f835e60f12125abc9a7cdff9a67091e72882b0202174d9067cb21284c246cab8135dbf01b59a062e487472ca7fe2154177ea8d5be329850b63b878fb56502df4c02dd9e4a404571ec25ae1f816e9000959dd53574e680916e2a7ef4da301ddd53637cae5c29e6cca6da1973760cb849a376d6b19557ea718347aa3f16fbc526fe2737a4f964ca675aebfbe7f91d86c6d03a60618cd1e7372d708992130aa1c64ffd0a205d8b052f236d740c8d4093def09173c5d1eb77c1e7ded7ff9000af994927195edaf04f034c7cb7a4ac231939107440e3b000b9f30fbcedbfacdcbe80f8f077b0db451f02df6c1c899c78ef1d65d35e488bfa4c1a296f502a8581cf1081460084932121285a8f8bc8ae98895dba9550abeaa0f2a840cf9292150073ed35a9975dd42690601c92b5f190a1da61cdf3544c6b73e8b681d5789a82c0a2d111cc92233d78b0a03b375241e22f31eda6ab0351508071c59a40a8f2363942a71720614e0ef9b800b5d0371496d93552e990b5349cd0076af5cc5dddde92183f5af803b9ae56cf9c38844913e57d057ffe16a7946a452110cfa26a058c9c3a298cbaa566f797d9627db3cb0cf58d6006b7ee4a97a1413f6c2ab832342f015cd6160fd27a8c3b1d44b4648ed8303015fe67e6e879ab2f1509a6c6d8e7410559c54bec2340477e21156f93ebc034c2b50854b63359a15921659dc1d4d3566df1f09fd860a325439f3b00864dcb7a923c04b748942e3fa0de69f46069cb50edad1947f5c32ad37246d6ce478a50268fc251384c338e40d646ec7bb37289b4b4b0b90e8ac73e2ec1e95c6f14ccdf081c90d7cb3fcf0b766f995b2fc7ea6dcee9484c4dae33b935ba6357e9d204eaf8f7cdf832504ee29781bb279bfff36e2e74aaf6345cfa693e10a59fc47ebff055ec35e2ccdc2103e0336203439ad3a5006afbebfd7b13a7ddcd968d8b893a2c04c2c0bf91f6702687e471b02e10c274656eaccb34c57cbbf0329955d43e89836dafb9f4c13ebeb594cf4c09f5841a6f03ae30554036a294291d187d0f2b945a8cfd87226f30109e8ba52581d02b5057fe4fe48a86c1738665e0614d1a64fcc4ff704815287d987033fb7e288ff37ae2d599edfe823c04902a17c70d20cfe363db50137fe192ef532ec11965a8ee3534e432c26fa87d88b6d158cc3c952b4da96e07d58fdef0cbe8cd85a826c8262a2617573c78b6a82d253bd98080ef301591b74813fa8f12a7703b081e64022e242fb42d207800095f7e094f098422ce3a7e2b462873eb1732b8607640de3e2148b91ab1387a592ab7680b1e334c38f27140f9624a0f0155bf853f49455b161a061ecad719cf0834eae175c280d440a72c0b55c145aac1c7d443377bfd187079bd842170c2bb701e8ecbf9b87c3c0e1a779eea0a5e8d7be43b564ee70237a91f7442caf1b62ec03523c6192b79ac6c50fbd180a6a3899bf15fbe04dcee0f1265aca0dcc0df7008d91eca9c609d05415784b89cb6174f292ac75ad4aeaeca0948086d96686c4b681bc997f251691b7c756df0c2c67c388e18bcdfda512ca5e0c5bbe2caf93a68bd879e6dc70d85cd601b6b2657ff884784c3958bacb64d0496d962e4f030a3bc331b9fdce9f1b602f17292011e682a9787b915ff92e6c897564ae7eba319101e87f99e5c9bde18564c328ef520608f6ee97b50ab3e494e13344a01760eac41cf4f8fde289d3ec37ab1c09883225704b100e4caa1c32148beff89c1d67813443fb584660edffc3f7044b0dcc1fec66ebf54a78000ef15142e3f6e345d6525dccd3132af247d663643389daff3b09411be5510b9bfdabf886f6494b568b1eff58e0f6b49474703196db88eff48d8fd06950027a95d7fddda820cf324617aa14229543cb58b33ad490e8bafd75171cd2640fa4bd6a80c12d20ce7a973911c228e2de588e11bd12f24206617d08e349fbcef5a580dc5b7b23c2e4c07d5d8a03330bcd98f72cebedc673e9d687aafc748d299805216eb41a119503ddf8d3b67130f1953204bc14ffec951d21352a61f2775b793fbf570a543cb2c86d8128901f56136d94a798854408fcf9a99da8b6b83f723a48505b9b895b18228c3ee4d8f582fbfb94838c7611e883d09eb9b055ea1447ff4d42d96c5430452d62098f0e2fdbf80d76ab099d59d7e276faa9c64a93992905700411bdd4634347865754fa4755cb414f98f941cd1d5ff207a38c71d3694fa0e8814c9ed90a933c95804fb8c60f9becc7a31c51e85bd39575125a6c26d8cd11a1217c8e5f0e499d2ddf1b68ab715172411cc271b6762155aa8207c34b8f8c09455e8fed19a0cbe5756a25b7fc917d8e583b3e8bc555009c63b9c3a9642704c09d711a1e9cf3edbc1b52a3158f00820061b09bf9ee7f35f21ae99b76ddc220911c599a38bc7f3adad4175cc2e790270d14ddd591c7318e2680d57a2dbff183fadb07254692af6615496be2b684dca3dcdebdefa1fb8d4338ce27cf62a7901699d12a0fadc95c9004a0218f8e8c1394af104130eea22525d05b3ff732141702bdaea8bd17828f6e3fa3df81a30f38617160799480f28db12c3fd5ddd40dfea3fce342507700535250709d6bb36210b07d1351a5129106fe7d51fe72ec66499a1cea4fbeda077e6e723f0bde4e3f0c7762d59a2e391f7aef3fbd0a81660cdd2649067fe1f8dc76175813075bde11be2abba6954bb3cba670d0c0d727c724a58f152d0815172b36ec70f56a3f39c0094bd5be32467055bd623c6b7901ec152d9fdbb8935094b67e697ccde0d61b461290852126f0c658de33ff83e0b847970215a2c91d9b68fbd3c33dd5cbc300b52efd93cac622224be66ae66a2199509af5e55927dd1f045487fabdc87f0fed70c498069476c2f43c84c43f0eb94096b3fbead43de76cbd9143e30ed38781355bdb7e0485a1e1de7563d5e0be413f3d35ff58964ac92cb794f6196a0b9eb4f06ee00ecc767797ecf7c4ffd735c94abd6463549068b394bf72af82b93afa30058b336e831578f32b5fa5d1ab645bb957436df1b9e559d2658ee637b4222577bacf4858a53be8fb7487cc98399000ec7911563f65c3ded25841f77a1008f3654e2ecf478a1f4b6fb855367059c0751fecbb49a5f0148565d1fa3be8db4db9dc64a422c3c7349c29bf1225621512bd615838118f0919851cf983c54c4cbd42c422f183d2cc078287ded80996acd6afe8c7c9526c78c43f0881f877d383e8b469fc22fddf80db2f54e3aaddb6e914be1fc5eff8c76af718d6d76386e6a94e51444d5cdf28a953a9b817794f9c915b3b951760294945a7ff4561ac0cc5f63915400f497761e7288e3d066c01fc23c107767a816b2c6c645c9733bdd0054c5607aace5cc5f280dd775f88409f1b97ffcbab14c5663fe8d278acab30ff1dbf5a9f3e3991bf7e88a577c5efe36e9a89cc6937a719ee975803039f7fab00c28532a9d50adfa4330a4cda5eef93b19f927ef402c5001aca16a15f0c1f3da80df3390be4cee39544bae5141c4961945beb945a78a39250aadd745026d365c88e2e9aa3e9231f536b92b4a5e26c82f71479839e01598679bd2e126ed28a22b3a19a04b597b4d6bf3ed96a4c0bb85a21cab72e78f16f76279536ddb2fb599f56e6bcc1258f40da6cd7d14c42dcc0a82a5ec23aa25eec74ae7aa2c8e708a061c6e558acde3126174c514168e00ad61e2aa0765e86ccc7a9b2f8e52bfad953e24fbd0b4161bbeea9d7ec3a53ef6312b93cc709c48083e25891a0ef2de875dd341ee76ab41f1748d00e030f478cb8704cba54431353cbd5839ac9122909ba58e29130afca590cc79abf885cded6587dad629d80e553186a59fe02182bffa1557f447c46a4ceebfeef163dec5b2b5c629973907da6e973a71ae5996ade805baebb90d549ae943bf0d20e1f20e7891da38274107559d07ee3c18091c45278c7b6cae1a6137a6af07d766a5ff7ca6b48ff491f0c8ddf78ca16f6a4b4f4d61bf46927c46e413ae6ccc2c45abb20b3ae5d6a676ec658f18a696a4853569081392bafc03b429d376beaa25763a8a64dc5d7d776aaaaed0d5d9f3c0af752a68009e7e50c16ebfac0e3fc098fcf2e617f7fb69ec2e649d59179be7673dc97bf7c2a7f6546b12fa32f7bbc859cbf462575f3086dbf1b1b4a40df5c1e2b777b13527fa0387d6937446d20262731b094deec6c4daa25220b16d9252dd9b7d0fce05e902fff174cb91031274e6bf9ca6516cc641f9fdcfd95eda2515806eac53ae20d7622919375111776d32557e8dce086bf437cc1209b6eb1386c80d1ca8ef7a15737a8a1cde83fe067401e5847c2fa8d220eb89723a2c3830884a45e3b949c8ef7da5172c59c46d718feeecc638197372c38c2796d60c4c647b00e4ddc9ce7e0aac8a4dbf9390783d36a7d8dd359657ba5b6046cc3be2da0f65f9ffdd57cadf16889717479bb9410ee8fad823bf85bd4b7bcfa2cfc3e204bc4547b6b79306aded7e9d0235d883e811881597034ccf93a5c37157d2eac13aef365946c8313ba34c64649a5e8b893e951fb5f3c9a9a298e7c6273084be05ed2aa30c10ac9e4b9313a0cd90b189590fd43a8c151ce2b17d1ec57012d60b1f9257f3ce1f565b0f17c9ab976e9db927d7a9d0dbbd09c0aeeba11cc7616ba20006ebaa68277831b620230316e246d4e71d56397dfb212b3bb28deeb029f512292f9a28abe3b411d2ad153e51fd67cf615c4f48a4e829fa1fdf46b222c1742642a5d60898581fcdcb7cd474d4ed3fec2b8d36c7a81d5cad89c32d11cc0184b9fd2c70bb82cbe0c57bb5e767b16387dd7bc524a856b961fbc101100514497523abe08c301b545061488c5dd70659eca4b440aa59dad49e5f8de666ff0de33eba094ee190dbcd2d99ab1b0f60d5d818444824d30ea13dc367dfa1c3b04c2357278f1a4870932f7d52f09b2cd7f6207980c6e9af60827ff954c6be116fa9c093039e489e5b87cd7236cf007d517dbd57d9bc2d955eaafb260919d974ea49e4ab06dc49b4d4b83fa8c78acdaf45a837211dc6c762382cfff221a23686b835ff5125932a46e45750c8314cc91518c072b99d03e7e8c921b7b4f87a3247a2227c46109573f5172501658d626d4bd48a7e698eceaaf1ebc1754baffa76df0e6968495a7bd3a81e50165a91b59dc639d4eef92fc52bc87c47b19bd76829adfd4d5a44739e78d407b9ed658009a2ca7e7561dadc783f4020a40cb5e2cd544154345312ad6f29e58bdd7cb5c4fa07896012bdd3fe6ee8e7ca5a47ceed50cb770fdcb38961558a55c907688c7605e60fca7b1ff61e04c2bd89268beba1b23979e628594fdb307de2d8d9648a6435f6706bbe882df64f5e3b5d9494036cdc9bfdb3ba07602303cb74db506397b1a047441dca9e723fcc003b34a13db5f0aa03120cf3c4ae96f6e26366cee1a13316da22bd255db74e97fc9782f6895f7d8a03b753ffa96d6629480b003b91c36e2bd2e454b553f0849c0d30dd1da12fb72dc527e5f05cf048878fcd134042bd32f5563da7f946a4b2fd34f5998e269a8a959a1b618c434c5cf00a7dea0b0e574e841309ac54638acfff351bdc57d7e73510ee800ec50d555baf02de0acc75771c27a607421e0888e98b0a81179c10816dc640455c29dceaa54beeba40fb183bd2a5decd446105a728bcc7afb9e184469cb40afae96886b953bfbea144adcad4d42fac78e27d73add48de6f0903430eae356d7611ac533801174cde16435624b2c4aad6b75bdbc583ed9f7ebdc04564a6d41f8ad859fe6f455f34c7aba6311d7b5666ed7a58be8b2136d109c5e1e077ab634097fc37c33ad83f316f0b833586e5faa26b899603a1038eb5d1e397ae81d0165b98bfb89d7ef865607080337a0dbde7cd701127f7a208910847843878df8021a92d5c1335b40c1b7975c56886382979462bff7ea4bc40ee946ff11292cb8017a06ab0edfd7f4ab2d9b590851aa4bbd071b4191e74cbbc3202e0968fff60c5ce7043c1254267f797b44dedcfc8bab5dcd8f67faf46e278606838785c888feed20bdd8aa1c2bb9edb436bcfe055a982ec85d675ef6c9b7ab5b08310260e05893f6ccbac1173a386754c51974299363d793f60c0f2b41f211ede34aa6baee718c77491c6a8e0f20817e2a12dee5b6b3430327affcb5aa9c040f0996683bc89e2ed332bab350d2e9128affefd4923e40e1d54669d67c5f713c54144e0bf0c7f341b573b3f21a9cdd49d51dea0fc0b5f2d128081dfd12eb6cb50cc28669842b70f850797a7fcf0870b2d41345f3a8067feda0b3a7273e749f61006f88620eb948d2644e9c1c8c52599097f46e089e30780b8bcab6605f4a836b29fd8b04dbce358eea25f2e4e03342befa31ff5af2c9bef9df59083d2b357e1ba17ab3b03c64a3d3d6d6e643fdfa55c990cec9abbcf175ce7925bd4bdbaf0fc311b1f82ab796893cbd1b7c80291e3af3a54dd891ed008ed06329c782768f91ade93065cf7fc041e9df38e1533314c0812e481e449fb9902ec4f634aafec80b3fdc26d567ed8b0ccf4580e83b25d6f9ce47614ea48f06ffef862ac12481e08e750e930b326b2a881d8ae0d1fbe90ada03ebbbd4e2e1ed743a1c6ac4d83ef0c866e5d5d3236a2495d256b0118da14d266f9ab175950f50738e3fc788b4770caecb9975de3abacfc0d04313b21eba461d9a0a5f01451ec7b13d80532d83fd452e69c153d1cb0cf219d68e23185ce8e5585e6bc68fda88b2488db0ddb35e1f241e2639feae328141fda270e6231dee03066980e9d54a6780468bf8405cb1b7ac2e9e6b20236b2f8ebfc80b3bff799a630d91febe0ae8fe8c8777e5e61c0b9dd0713738e19d394a3154def9e88489b255a7284878cdba37ca676ac55248803473479e0339dbec12986d661546a57b5d50b2d377a48a68c4ef9981302867b2df57ddb9c2c311f4f02179b5c7852913a2d2712724d59c20f9ee3498ae0362a38295b1c2494515739ad80eb0056738e981f2ada282fa66df1b0253caf15929ca3925904b7f48c9012a3e11df22948927af6c891c6fe981379289164d5824fc677cdc6ef2893097fee51958c62e4469c47edbcefc5bdea3ed5fcd07f4cf0fee036b6dab5fb317c08a059661ce5b7807bd08f878eea7e29449574b48d125167cc6e2cb001e358d2a72a1ee8e04dc6d49631ffcbb5dbf16e2e44048677fbe1d3420a824f70b149e8f25b314d0483ffa5bcfa7c4a1cbb31747d684e8150aff5491a75f6154d7b214ce3525fd4126fba34795201e2dc7f6b5e04a81807b64b10220f38d621eaabbe396bcf72c932d952d3349f6d9f1de289b9ab86aacab2bf1dd1136bdbb1db48733df60612f597d9a1e31298b327afbf166d45ba43baad2fb115864cdf64dc40d3c8d2810b9a259906c5abebb56fe87831195e45aea225a680ad62e2257e8656aecf1815a5cab296db0ca58de5a60ec34181cc49401271d0e9c6e263738c145dccb4c97c217a85e44bea238d38987d0b01742838dc628c4bc2e5f221c555e036a26dd808ed63d60650d547b9d94c008f3ac8ccabc3a43c289a021d81d9e3b9d6355949b4e976ce47e12db6a0e92e596d33971affd9fa977863dbb3243000835471b4521a8f59c3943360ff33587bdb8a48f3dc8f1563b2d5a4756ef0c6aec364b0d071f9eb59db07710e1a57db1dd1597bd92e1b920b5d356bcfc8830ccd8d3dfe23145062cd7b828f64fe89e5bb6bbf3512992c18ded322d30ba23e313ed705ccfc9dbb7b901eb2e3540d4f50b8d448a88a38ab9ce72196e535b267d19e039b9e49062c95d0f0c27fa01ac95f332be58be675759c495ada31161dcaf55fb3c3fd5efd5337768f07b0bf951bfc1218eea816a70481db697ace15b9d5709caff48bc29064eb4e4acdc78ee1730640ead52f329d317bdd335e3b1aac4fdcf0217a311eef827b3e5e48d67b75ef2e57c233723fa0533892fe0548e25ddfb0a974d7ce75ab9235b901847d9b4bd2c0e8115632403d065ef37828802e3fa8547bafcdd6c4454f00e6f798d18f7b20be5a1ca1a97d3db432c2b9457519b91ed6a99b6085afade85ec50e012abc0ed8bdc27fccc4adb3215c85f7edefae1b9f4f0ebb1433e3a033989774cd4447a6c02a029b8e9847a04832db8776f219adb71cfe43e46f5a3b125c2b7f28bd03a001a752666c7ffe75c666e95f5efc70ab76f1be7bb2e18e6b2d713ce0e5bd590b373a3053db42ade5207b24456db81ee31f56601b831934e8251b1aaf24ccf5e13a9adaaaf0aa4e43de66dad9099b7a538996a5ec09479367a6ce951c799b37146e9ead1eede6d3c908216e050353f87cfd4e2611f6b2b14b8581867b72fbe87a5dd0a32a7976cd3a3fbfe0ac2ba750be81827e4bfb62ce429ef092072e2815a2699f164a2adcb44455de9c451b5cf27a8b44e2c4053898e3e17a985ca6a1f96aa5e7aacafc60d5a7cc7dd163ffccf8624626c397566744142b48f39c6837e8b38346c9b4dc3926f8600d5afc2ca56041ecc458d7ae8fa73613349b10f4dc623dfdbd844c58d10499f7afcccf097e8fe46d91a046700487e660585abcb1e854b795941d376c5f6595a0896e25f5e5d3cbe3adf78d2c6fde26c99077f2355c0c3d8d58a962535ced68b88f01c1ce2444fa8e4ca38c813f820c2235702011033af112e74246e0aed2eac2706964e67f3ac535c1bc45886dfba8d3deb81d28c0ba56ff627b2bff5ad34ac20d97397d04e2ad1108902a32d1ab7f8f174b3bc5fa115620f7ede3626a2c4ce24bedb4ec966ad7913270bebf5ca9f063d19291faf6de5365d53b067001e4f574dddae3b6d45b6be9b5d9f60d3502bdc22d7802697a0262a9b0162d9957f34a8d61729f41ac1f86c0703fc51552cbd9322f8e364c7d2fd915abf0f22dfbbff599d3a5564f765a1d86ca7df38660d805a19d101c07a4221b0a94ce385592e6d2cfa5e859b3724ebbb0d16c1ae8d14e625fc70805d3ea5f1074ed9248ce0721ac9ee8baff07a7684cfff89a105ab04e54281886625ea02ecfc79aaad286078f1eb79c473ed624bf523c8d15471d417558e4390a49e3ae2465e34137972a0e392172fd43e789cf8d449a635ec9b07f64c14f7c50aa8801e6d5d655d1521239eea6a2376d85721e84e5e257607daa9f39b56a8365f7b0376122c184326465f332ef4fa46342601b83e04ddf1043e10b01e7beeca2cec52cc13dc31bc11f3dc2560121ee92f17c433294f6a93656d4e11ed92d7eaf96e9b0ed2a97520b01cb0b934da1ee354cccc41c95bf923a7cc0ebec7c10461796c9903eb3690e490b0f55e1b47c08ad228bd1d5ab417c9ba891260f8e552cb024ac3cfb6c665d5a602edd63ee28baa9d64b35400e08dba501c5e4e3e404e9a2b8c80b78b5118a3829e662efd659efe6acb17cf2d79987298026f05bed97852002269ebba1e528f231b1b1cb823d9b4be97d66edddf2d4b091c7e410bf88f6d0c4add82629de68abe2eb93d27fc8ff52935def5e218f97fe1c1425df4f8d90c3468dddc3402e95e3f73bbec400e7a6e2c571ae0dab8d8c3a2c7243758d1bb87416772ae75e3bad28e415cf1756638c1264323ddb8cf36d0fce4deb0a9173d4a926aa16c91df2e171947457215b4e39054cc1e16c4ca244aa06fa0807e5b7ba31374d30d3852b04f0bf2035920a221fe6bc03c8fb00af0498820fa4e9c52fa8450d8b9da2492d652d51bb0202c568e842f0f0569a2de3ec12a0f1647920701fa056f7e5ed6136904c931fc7957fdd3d7796a1deb0b9b0eacf29b8cafec2ef2346ec94e4d845b94f4b48dcb0d387e2a02221b446047153d625efb6b9100c0750e44e0aa021a26aaa81cbae90a6dbe2dcf480aae2561e4ead0051668cb7e4e7f03971ac1f9ea25749f73616ccb398782fcd17ee967550e96116474181db4beeecde09ca554bf6ec93399d60673b7862af0b72ee0c260403c7d6c01fdd8e068aea785b418276f13184a632269033fe2c973c593f939e504814a93c2ed147a30e182a9f609f3396ab25c09421ffab2304e41be8ac23839d243bc0f14bc54e9575fbb653e7b652a05d0bbe1513aec55b4909daf35e0d3b7e51d80b3e866687308eeb0bd64fe20af2fea1b7747d2265c521dba6cddb67efd4f503d3bf564654597d5bf0aaf4b9720cdfd9ad7e4373e34f7d0835da9c5f480086c804dac54718eecec0829cdac12e320013d5c7d1111ad072722678c8ebe7a5eccb209916a4de6295a9f5556b5879a1e2ed0505cf2e73c5b21c5a8c1f62e10e05f814fa7c4d7ff3111b3dfd2476d7b890a43ccf6d30da5b6dd96189ac330c4a2db4a3120bb5053101078e9eb936011e382973596f33df03465fd40fec100433bfff68134b4b79513ad2212de43e8fcac3b59fb39d98f40d88ad237de26ff544f230c8fae9906ce2b434919c7fb2fbf7bc85cd73efb4e6937d320d93bffe16b5e4e0633ee30e28940c069ba10c486030ff2ee40fe9946272098f7dc7ba102ca720a733138ae6fc0c3596778b44b2da065216e65ea1e8297fff5d10ed3fb4ac544bf445355c4f4707f309054bd748d643c87a52a83e04f12109e61437e54010577290db195094c6d9b4a2133926c16e62b7cccd73d7c72f37d0b02112d4d21710c69d7f60a81d6dd2bf5ab7f5eb73ce7e131aa59fe58efe5289c7e5dd518b8ab95dbb38a3b830c041dfb3c311dbd31cae4176b0f744142290839ca07ccfacd6f961c5b31254bfb93a3c4798562679211e7c1d5f2558310122f9122991d93d0c444b766ee3bbfe30ef91476a66bdbee4f5a055e702303cce17f4705ec98d8905d3649ee3ab7b7fc98c5bc43f0eb54138197bbc9f8e486d5f3bfa6189dd458fd75f5ac717f82d30b7c1ee8517122b81e69eedbe3363812873fd1cb20a519ed3e1c4999ab61754f20bfbbe8243c72426ecac1ecd1d234cd2799bda88225ab4544c779dc7efe1ae977a42513a768abfae25a73b72bd8223aa848e5879d02cf135b97b340384f4d7fa32f4516785d73a44e30a705c07b5666c48cddc79bf118b898d93489f0e38e68cb24c8b2205c4de77fe4aad33499557bedabbfdc733f378a64449bd5e2efff62f2e2192b98bb30ab77fd8c1c9d0271d37fb02d52606cd5d9ed7c6aaaec5385e0a7bf9cc2fabdc1a1400bb211fea3bb4369a9949475ee1ffd507c19f9b58bc7573397e801e9f1d7fb85142dd9cdcab1d585c1c95789b84751e587f6998a20743e0ccdf3d2324057d64830a8671dfd3c715ba58716e5c0a5deca5ba272248b7be4ea460d031961e8253c35c4f4d33ccc85c1696b03a3aa90b5578d711a784d3c71ff2a73afd8c6ebe5dd0071d1836eeb1e0ce1de7e5b95c4d39725da71f2206a42a223f6bd8ac22e8ff93fb5d19f12c3735a45c3093e3df46339445f499d5566c870ed934b7f3940f00223d1ce4aab21f45a1265dd1e93fbb5d00679197e9f7abc7257da7fd7450eec6903cfcc73c4fa565850125e49d26d7cb44833a5ef90e4695d869a50356b44cdb643e2c4df431e9219061757e00eeb651f4443490913f2dcd577b014a574bd3f3679a72c2cc9dbd4b10bbbd495ce487b2139166534389b7575659f8b2297cfbd7b4ccbb27e9d581a8de97b0e7109d64d32eb0af7844e7f2c56c02f11c64dca48e617fad752f33467ee92c2544e9daa78e0b241a53afe3392f4dd72a6caa9fb0c1e880f1052b11cc6d91150d30c97a4b3b467cd2604d01b8f37570a3b135b8d51f3e2be810624d1c0c68c7be933190a7e53eb56b9d579269923238e490204abc3164db92e7b257254855eb5acd491f7718b197a6a4ab85cf06a85ddcbda00a3a67a0312d205ab272cac8cdfacacdf45b2416e3051eb8503724aba9dfe3fd88a71f0c6f2392929a9512ca3c5b8aa35bc20c4f66e0b758b02b8077ec5b8c50d473e4acaf9d40034950aadf6f37c765d8ad46e648ad42ee134401f96b3c6144d989bee4a30fcc8a281b977dc25b91c0a8ddb38644e7ae97ca4779d59814b72a189f1ec0bc238c4031c41facd26ea50f3bc919dba3dc02607f715d91fb080810ab63d958bb322d71ef5ca8a53aaa7f5f89a4b362870d6162b5bd2557ecfb411792896b4fe0c89133245da8e77a4e52c98fa7375e76b59e444a9dff0e2006e5f83407d83e70d2d9470a4ed13a5ab0dd6bef798af3fca797cdb536df99648e0f741326bc9014ea2b10b27de20f7b5c90829c6c41d780ccec505bf6d8218d1d7f71d423cec76f9e815a392e837ef177460a7d8ee083ac68fc2e0608f694356e24147262aa44382d8302c1fcc1e86bc05252234f48db84211fd3ee0c3713ad57b72197f43e745d9a8b88fc0b5a8e84dddab872cc67089f7a9bde9c973715725dccd581f267cf775650af1e6998197bfaf703d049d22b628ecdd4bc4b12cc3cadc19052daf26c084fbbef776a8b4f3a7066af89c32c2307ed9a66ddd901bf9e77d2f071f8f292c84286717bac712113c91d3e4d663846ae8e77c3a953b05259a29ef8777393334294166ccafb4097408d3c131e4d6a952af65845889329719e26ef83c1173e9a41c088b13ef5add0b08230e40fa139bfb2c058be3999b70a48b119ddc25ca56ab4ca72efba010c1cc6c8f5ccfdf419e83e73e6457cda57910e3d9e853440e9427b6163e091caef2c7187f6f6b1af7f61bc624843a2fa9c013e77889e0d4a5fe3dd8c9fd55df84674eaeee94d33267774a9bd1a525adca2ce60affc3314de869be3a05304b0ad4ef7c2fc4473f05273e849c9cef8c36ab50ff6e36255e491da7cada3223f0717815ad3365ff17d49f7ed62cee87e2cf84bd31b94ecd13c84efef630938b18ffc2c55b2b7ad2a484acd89f7f0561a0240adf92979debb0be9b5fe34843c9d947d0e5aec2fea9677f4cc387b47ad8a06ac1fa69f1ac94ea3107b3360cdab77c0b9ba16641438cf1d89cfbd464a9673ab66f0fe47118381c18a1a156c46f747ab4c437a083d8bfb3474a61c14d425d1b203fe726c2d0708911c5bcee9b24476e520b57577f95d313822d35cb47042213e574ac878014263c97628b0d8b612f912171d6531fce703ae8c2614d76a324df2ff239dc77956c16c268fe21552084d1ca25d151287288d1e70d5ed1c5099372a6b5ea1adf36e27aa0715add3c08f2c21581b7b176035f298cf6ad29a44edaccd8829b2137ed25fdded3afe776cd8bf6539b54f3a18ffd9cc3e3575761c012b65e0b398feb060096bb88caca9002dd210544bfdf7e614ca3caad0cb89924602a4f89ff6a0cc76002eb23c5a663aec6611475748762b6b5cf9413577939c5fc8fdc6fe1fc911367040deaf083c6b17a965068f86eefa63ad9ece0e7857f7e2f1728f80751e5ee2e4acf896df7a392bba523633cb930951ff7215cf9384404ad54c852f8cba8128a83c877a50b4b2bc8311d83e94f07f3d833a60f67997673caa9ba7774adba4f097115841aa1314fe78555b2b3fcf15869f3d40944e378e87ee646ccc7d4af44c9b5b8d4244225cc90f490eb7ceae0b6bbefc3d1781caf2a7cb31b241d4623c4f2e211a5cf9477037632b3e71480f0756802831b33a3a35fb5ff2b59f5b81b7a774bdde80c06fba79fe063580add7afc7060910c807a19b2472c6cb171e5519fee8910822513552eba231c10dcaa5f23c237acf5673c0b72e460c2cd551878a1edf6dd6618a78955a48ce83e256727631b46a3a421847ae62be9ee5072115491b51060cabb213b9823a94f5d68bc158c46199cf9f159e9ca2f8c5fe559e6986c07141292452a0e624ed9893737d046be0b8297a4f53819440cc40c9f8533180ce362ecbbfa3df2b5edc574b00bf94dbd2b9eaa817ac8be5301fb57cbce9f637c1bb4f491055130f53deb901448d966d683b28bc39f802ded1144cd94ba181aaa076bfc0671bff84e49e562b66e73a03eb73b05ed3516aec902dae2f1c888c4de96e344d61a90aee7b79749c0e121b391271b71e8be582e2afe19f14b5e6dcd31953dc078fd8dfa5fde5b3265a3c6ab129103c74a80f317500cabf9c3ac7dbf1518d9a882bd2b8ca956af9950f23269180b336e51f1a90b9ea6bfb5576acf7b330a833c3e86fd016de9a8937169edfeae2ec3699dbc3187866b2675b3ffd0d7c75af0cc2d898e91d109e318d1f8c6573b6182ff65b7f7a020fec50e2a3ad3353e31667d4cbb9779c4f610a281f77694e24686ee193b2427266cd27902217ef21ed0029c9db318377608a5c01edd984982c2317e15ffd5f76dfcdbf8e975b7d91edeedd8a1a3b35a634df20874ffe1f193d7a6852f19934af97665af9de07ca10965a6a556a3dd008b599047b9ce9ec84d7883a2340829d3e531122c27f2388183a72662954c37c662234fbea5d247550254125066015274e6a70ca9ea932707a92f0ed7e5cfc33694b68611dcc205182dde64d5fe582cb1b8565f1adb0ce7d992ea72a0e23f47007b6542727e6e2b326b2d63577b7853c1dc847b8ae89000dcab529f7e2f6a7f4886817ca761f76a4d67fc7878ad1b88cbfff7a56d1eae19c4fbfe2e4f03ef0e44098c305700e5537471ba1f8f0cae33c248981057ad23232553c956765e949749cce33aa201a0f5f3e09a063c654883111c60cd6e0da4adc43d4610ff52315bf9b7197af9e915b577abc75e9c8c6fc509a6d8480f2bf64ca1f9ca559eec62dfae9addaf2c15068425d32d401df510c4bb667789194cc00ab313b60409137bb43e270aa113db36e307022a932b8618bd90c015defd35e94de947851ab442872cedf10f72e2b91daf20a3a033e397990877e6d04df1b4f7331cea9d2182f10859591f679d718a39037aa7495bf842d8cdcb81dc849d8fb0e02eca1fe3392e57cace091bf23658f03c6590f7e1d69b9bf55f3f3db3f683cbb5d924049780ed035acf9a1f2d03456a5d39818549f783730f87bc6275a76f6afb6df64b829c44bd8a9043b984a9133cb79dacbfe30891e6a4293f706a20fcea050f99b6a8d2d2f5c3e5ad54bb5f4f69d431170c7a94fa59b954db0236d0e73065697d01e7920152297db0dd2a5188f04fca1201a658e8917f8ac24a792d77c60ced6bd680f97a58b668306e18259d68021bd2f5dc92f2b220e33b8fba780879d85e9b78381ccfda8b553eda7de031028032d8adf49d563c08adcc04c147f11587e493ccd369460932118e589da09feb293f85b69077c9719666015bb29faa3a3c84a0a59b8ab4dcb728556c61522ed1ca0531a54ae995c460a989a1d4cdc63087b5bfc306ab1f5f1c3e62e25c868f9fa335f716ee3b2260c3c76a7a6c676d7720659e2bc889dfa1baebc24eda25708164f0001941c63a04657df636271e74bdedbca42b869a57be9664d5f21901fdc257f805903e1081df04ea6a75c9446d3dce0cb50ed296d8f505b84c6cebb9ef25897511f6d0ee5480ffbedc8a44d73958c57ac7179130ddd8e47ba82e624e7a0f0272d751002d8b9e3e0ef2d060b7630a445b83a1076c4cd74987e49a7df1394a87ed08d13f32c009b41be42aec615ab46dd6bddb014151f94061c242dbb06f86938bc7d8e24467b7d1e3227a814005ccea4d412faef2d03923312a26322eb726b50172a8ec751ac1906eb17893a025a5bae3567f4962a18ec28846f514725e80356fb10e32e83a123db5757b1fe4e6f9516af5ea52afdb601b547daa4e500d6f981f3ee7a125863d5ce42924237846e32b4763f6683f5b5c06f248e2506918cba194a8db61409ccb4dfe2baecea319d72502c9e4ded608fd0b044bcc90310cd8abd7e651b7476e505c63eddb66ecd4abbc6ddb254f45db4728068dfb7ed4e11735e89fa27da25a3a3a54fe989e498ef683d592a538f08a2e390496a7dd45ae23c643be701d9cdef18a78e97ff8e4366efb459877cd6214654df76051f0001e297b79b208bf8a78dd507b6388f41d88df89d1fd93a02536178eae37708b6a1f89133f9ef580708465199f7aebffd051fde9429b25cbb24e6eea84fd30596d810a5b86600598d3f55a8bc965d334a771ffd5b569e6807f5149052e3473176594291125805551abab9b777b5186b3b7de75ae4776341427c5f9ef49b8de8d4c98b299b4f41f91a9190b7611c4ee3762c00d031365642bda00a598cae90deacc2f433812b3c680ecef0422f63562e33ef7eae39c57550b196a0941cf93a199060897ef191d0ef494e55774cfbf40e29b0d4d7920602fe959c23a71e32ac21b9f1d7ae57552b8de05cfb4029fe7aed86f5d7c91c4af3c588c8ba8b13f7d0a20cc4c3acca936f50e3f9f4acf3bc47e11519593ca1ad63ffe380416ad95981dc8ecbc1a994aaa745ead6d7219c78f8dc9021418e093433f40453e4183bc6ce6d344dd923851dba448a4bcb5e66b4cdf5167049ef5ba4c71f9308259964647b2bec237f78f9770b6d668b263b57284572bfc06101c0f0ed0b39b5126cd2e2dc7675c48956aa2d1376210a958fa1eb0b7915702a652e4aae0c3bd3243c7614cfb2d78c70fd1e805e6b16be6507be4a927d15f3b74e5baf1256d40d7e29f02fe525efcab108c08a680dada6a3251d2f11b2ede1dbc9049d89505634aa29c448d76fd54681139db3e8c87c12104bd6b22188b88bcb1d052ab52d079b0ef0259aadcd8a70e4252c6b6a8a13548a0f49d3b1deac8c917e2d1a6050975f5e106c95d4a893805c84954d5f192135170b113199c32c955cd340eaa16f553e6d9a05a8b02e8062a8476dce4cdadbf10ec1650c51bd546dedf26f4955303f94d22184dc644f75511de45f65fc237bca7c4611cb64883dc264cdd22fc1557b1419838f05464376eba5c7ad0c1dfa19204ba3745e007fbec9a6ae807bcabe1ee4feeede25d22c3d65f9ebdde5a5cd139b8c7fb030342ca6b64741084dabee4b3d2d80830c2e7decf37fa4ba0d1a8a4e3611fa286780d00e8108a014add1253faea0b7be55a56da94e75b0aeb90b373eea91f990ebf76335fabaccafb97627b0a77bb6bceb6e5857b55bc092818d5c7d74f9120a8fb70917229ab4db4361c03a0d0c7c0b4a1ac03b6828e1b9bd6d7075dec22ee7cc812a57141fe65e009e0f1fd9896356dbde87eee35ddd3b3cd99f0ed1f37369124aef915ae2fcdcf9169663b120355a0dc8ac167be0345b36fe3429e13cfd9951d42b5bc993a46a8fac15329773a95a9e96d812b2fbbdb87970dc7cba63ef5d2dedbace49d9a07e2b80a7ce77da753fc02aee07f27d750d33fd99998b96fb3fb6d34ac0d129e3a85873bd7db0ae7a47fcf33544adcd5dc7621670ccb89bc179d0587665b7d631acb198aefa7fd294c34cdfaad25de6d4a32e2830b5dca90547f14c56e2b05dd5ce6e71c0a9fd85aac84065c73692bf63aad3c2903e2f19d6e02a25249bc76db2f6edc8b8fca9a5aff30548327a19e2347da0d3bd37e46e1f4b270b4036f6edd3a6bc1d59221d3eab7cbebbe3c1872165c16b044e748fc8fe5fefab984a623f4203022dec7fa89904b46f0d6a54fbf9865e09740a1075e9bec7e59804f46ca2b67170e7d5423608f758ac6af5dc73f5ede4228c0ad3e7158d9353143893b52a367d6b4134dea29c037a3bd0cb15d45f99a2a2b74b582179b94b159826169a72f420a5ad3cb52fa00d016b1ff94116da2b0c93293741724dc4a80f85da1b2617ee385d936e1a54e1d500db8763495980d5f761e7361ca0afe0f9f7ef1c0b6a8041f3a438577a5d82f669ba7af3a678a4dd0d5864d471add06287fa767921662b3d160a23a761645b350ac1d895573327ba51e93af08ef1f80b3bf9527627db3e8cdf99aa0c3083874e2fe1ab10e3494eccc78b06d528ca037368072c814abc223ca9f9b7ddee47d0abd63b50a417c8415ed3f889ed240b453f9cd8366998c19f7a9204e0b96dc09ef719721a4bd9e1841211f23997664d1101adf148b9c94903ff6c6cdcaa74cecf44929a8e493ca1d76c118596150aaec6ff95836cddea9392c8952e1f2d038c84155dd20d1652b6978449e5178772ddd3295ebb81f8d357284392a422a259438d75e4cb48a5ed279b4377bafd7cbd98cdabe40ca6fbbbe99d5c910611ae9faf90b0b2b0d5fbc5353def708731284b58049614af970a73b6bea64ea357e09d645039f89d18a3c6762cac6abf3f636d04ca5bcf920134b1eb42d53dfdde6051c552a509dd00c46b6518b2361e776c5b89f1136f14a937384184a4b52109225600a23abd969ca075daee7a3f9659e5539fa26618f651748703f2cbe06fd46926f848baabd339aec2dda273f2dde131bce5bdfe0d8c08efbaec487343a4e18a3f4ee42e6240acc4b50159b82ca57458bc5ed54154274b917e0bbcfabc676d7519c8fbe448c8afc1e00192dd96c7ae69dd6b4c2786abdc35ebdba8a4b4a166e14501df313f449421e29af6f0ccd1b389f43da94bd01cdad2ed49da3a22e08b01db43ac102feadbdaf15220f1702de49fc9591cd91fc97e8f368220a6d9b679c5882af05dfa3db2ee2a3491133bbd13edd3d880b4911b2394e8db13074b59d0f0757a57749edc6c04499a055c9336b6ddf5260b849ce9b745b934335edde9ca98f3de8e14143a1adecae4bee83c8d4509c2ab9e2d2772faeb0071ca627339207d0c4c4250484c501066f9fa5b35a089d3c7bc236643dd5cee0cc4a4f3174a51158bb96556b952b194c8cf0e3a79fa652fda432a28f04a40e1c1cec0130dafe7cf638575159ecd869fd544a3593575c5b63ef9ae622eeab056671e4d07bf6a437fb2de476866ad4658adac84e6ef9597f4ead4c5e79794163d8ee9cd39731bf4717417819b369db0be7a98ade6e1e7e12af0bf4fcff230637a41b2abcc29e784b64321ae693e67ad04264e8cfe85295ead90db75cad89ffd1f9190c36a8b211c8ebabbe574dfd45f1a5c6207045b381c90fcfcec6d4946e6dbedd3f11b638147924b1047ce0d45e8adb475db0dacb542d099ed3f22f68e98dfbee994aa91878a77f7a3db144ccfc5df17918b52798eb1a604aaee294dd48747a02f0d381b8072faa6218dc1bb04ec15a92bc6ea3ee3b3aa26ef66ab98ef5fd1cd6a60bd3c7ee5cd19aadbad9507522f24bc1bf3977567d8f28be000ac030579ecfaa59c2d29f2d01b79935deff7f9329a88021d5f56b02a6acfd3722f5629a505a0b12fa865457139e818774785072c00562c590c6baa15171d8704641073d862ab758b89a27c0ef4d7b6e8f2a38ebe26c84cac914e6ecaa9ed58dc0535cf239f8973c1820b41f7ee48fef364dcac3bf1666a59ee6930f9daae391f7bd0a2ac758a9a6ea35ffc7821300270bd304568bc83e498cabdf5875d263fe31ddf3a2619fe181069468b8d18c2339ee0f4f64e68ca11caba4f0d5f230db2f4dc400a83cce9c32f76080e5928f6aa22ba6992f76f6977170c670f7055794ab3434e6dca09ff5446ef1737cd117e2e802bb6adf9f3cdf664fe94a948a5e72b9c601d7a1f944cf6b6758b7783b1c9f08ae2250fd0e3dd9cdb026e88f2be4e45589f8c66a38c4ea537ac5493e27984cac9d235a45ffdbfbc31dd6b7c413f908369d59f10b3af8e2c472386aadca1aa0ca203dc43ca664ca26460d70f992be1b690fb717be99f649f445c424b7bbf511e5f0e7d595e01ad95dcff9b418bdcb55efb2741abb9a58c304ab368a9260bf8ef8a819b2c427c30cd244958a2ce57502fd110590b90ae212fa61e1df1d7164cdff4d6b9ecba3a43d815b97a0d78673be8f34e5eae167050cd5d554b024db4e384985d59bafc8df17a6bee4fec99e5d131078c6b6a1872033c45a0c972f902db1c333c2f3eadbb5ca9d7dac36e3232f80181153cb6a2f2e0003879d185bf6f461f03a91d6abeddad2e1ef4bb39133dea09d6e892ac2b09d1fef2ed48327e8be92e04ee29b2956d083a0e7c5714edd79b6aec96f0b9ce75c2dbc2ae0fbea3bd3b2e01eb8f799508b2bd29906be70c5ca90e807640069b0f8ef6cc64a82eac9835fa9875a6d2f8254151f3bdd28c68f27203aff14575f738e83968163b227c1aa3c7227ed18a2a8ac25c622a29369840356629ebfdc2499f92e642565cc8399832ef4d7b7d44d8757d2d98710ee8ba111b6349821df45e71d99b0c2fb20784c3fd7fb369c439cb35dee36d2d90e5d690dac7e878c865d9c78fae8cab1d84da8cecbe84717d444ea6801ce7891e28e572036348e6f60aa7926dd4ae8c225fe3f00b93eb3647117a41d974d2d9cfa275f5880584a103b28edd4d2fa393d82cd9b6274fad0d0b96217f2881394ca1858c1eb179a492e22ccb940772ea2a1c30e1e787c35520523cc65b1c29f0f04e0702a5994b522c0cfdf12587ef522ac014256f1532c50552802b8ba0fe88c9b496b45aba1a9e9b15777056cb7eafff088a05c5a0ecab82775bdea4637762a9cafaa30d8ad29b3f0fff886e5882231d23d142069060a0b9a2911c01efaa7cbae806fd38dc7c922d6e25760cfca08aae14f112b74f52ac75653c598a2897bcdb06d483f431b6986388705529e14c5ccdc0bced6082538dfd6c6cc0701362df4f3c4c27b4c605ec7c9ee1470ba6dfbf89f567abde0a8c6056756f8c8cc19c3c462b751782dac3e17c1419f3cb079369002f9b9a260001817a6862ead11ea6f91686bea440af4c21c4538c10cd9752c46e3accf19745cdc5c8d59f6de19bd00a48cd4effba1762897cec66390aac1490a9a1cf902db0ef4e334d139a64d1ed0ab4e0d14a7ccc465683bab72ae6cac25a058a1569f349b9eccbcc80788b481b03bf466bf581e89d0d477f529e8e334b0acac4d1d6edbfed6e194aaaab78f3213eca60eaa7c868bb363d0408f8735511a20791fee982de5511ba36df73ed1511db86a109b153b9ba03658ad14ad62b3d2315873013e48c358adff2e0fdfc7c4b9261b7476b1c2ebb406c8abb70faa6d35d1e284206e4543e6ec82cd37b0ce9d2ec198f48f22479d661d2217049e11079527ffb0904be5c99f7bb87bd535af7498ef430c47468b960dcbee75d0cb718a85cedc4316135cde9b971f059e733dc2020f5ea3409187ca21e6e0ba17a3a73b3f3a06c805799587769c560b17bea73db83c25ad0c37816f8d86b2a6ef09f8b330e61e765f457a4573a49798263b3f553b6b80df7a90778a739f0e483a2e199fa814c17000b5237117b377009984afc7b7a70dda61cb7ae4c24073003f463cb79fb806dfeeb138be360110feb413c254e8af53cee0c79e14e21ed0fd16e18c9878c2cdb5545303ec6e036e01ebd6e55f8a4ef3bc2a2ca0538cda1e25d9979d3611ca7a4e9ec661b207c3929d3b390b275fd2512bdb03dfa7141cd6c6fc10ffb42813aedaaf6ef2927f893658fef801a76503d1add61949c86251a9dbd7bd2378818e1e56cd6422521a4df6fceb45877a728bd9297547fe8519a7846fea831d0be98f10fcdc3ba5563c78d6252efb0a84984160ebf7365b2617f0bbaf165a798158a739ec9a7290b29891510f8dad05dcd6f8686788d65e4b943c6ebf2f0b8c8f0facbd76a8c462c4eba61d9a15a6eee7165ed6359075e13e6a3e0da94f68810aa3e87fda5304525357b77fbe48f969c65da240189e90f3ec011d870f8a3d546f20e245c780016c40eb1b3bb1b76cfc066ba6c5f0144b1f8178638b6c47f823496ebdefe0053396ed9eda58b91ebed1d0fb6d4f25ce7bc6178b059bb6b6533657bce0deb132b1c3caba5064161d92cbe1e4cb4950cb60069c00ee50e1530ce665bc6a68100ac1fef53abb3f3fbd078f763898c263b6fe6dcf6280446abe8768c720bcfb5422189ee00fd8927fa7b8294694ef525a6626a15fc10c19605c47ee89f62a846e15ce4b86eaa7a1b492c07931882945877ac2e0cc163e48e047ec2211ec77d73edea6ed1f85235bb4b1769d5968baab2a8b478d0151bf39798b06e19d150a678812b6f0272d3f8b5e591a28410d04a7df016a477c6c226b214b6a1d969974b24fe80b7a88b6ee9a9305a7f359a13b553cf975f9ad3411d6ebda97be69dfebe4d9feae69551b29e214d86680df7ec6fd76d7bae3c0557ed8c79b6f2cc6f8ea7c56ea0c5b08a07492a141df9c9068ab815d23a6b3707808a728ed02c39832e60df1071cfc9e051389fbdfd967f080c860047b8293b2664e32f9111ac089f71a273229b6d2252fe5821d3ca2e7e25572b94dc13516279f13138d9f3ae8073da8ae85af8cc4bd8738a1d6a2ff7380748a39125885d0dd16ee16fcfa1e60298f2763854ea7bbf2d553c7f02fe9d35c37a6a6e6715be219349250d966e2181cf322d08c2eab362257ceb8297b2346433e4667ccb1f307ef01629e6e8eef44519e299829dabd5816a6cdd7b33435609c59eef0d33bc0a91dc498d227d41f6758616c6467ddcdd91296282d59ba47fde5ccc2186555082aa4cfca75db40bca11fd9200d59ff1912fbe1b2255d406faca60e1020e0888fe4d61e3a47a582bbdd2c2ad767469adb8d158f2e34f7f16b6347aa3e46683e3ab10de459eaacbc2a7d7aa70323412ecf8d86ab13f16e199a4688e2d1529a8757117d9334981abde5994800ff444bfa62e902553e299b7032a3917a49b5039522b423f20bb806c38140b9732df852ab1d88dfb2a48ea25bf2646dd424fb2f10d0c7e4aaa7b45b782a444bf84cfb19ea346047f1c65b6defffed78c2747427dfb612b91308940fa1cd8dc274a46ea01285dd6d4085ee935d92905ce57553630f6bdd6228e0a7c5cbef7478749725941107b86cf4eff32293a96e6a0db87a3f4932ae9e7fe90824b79972cd0afd41039da77d46f62873ab8601e222face9798671f837a80bcbf7ba54bf13f3e0578bbae5c0483f76410d7cc576bb4ad0560ffc2512657bdbfab07ffd6b88f4717e66acc790671970dbcf6d06712f8dcad5bc275b5006fb8ab58a067bab3d97cdd41785d0b78f9282d86f325df8b38fbda5afc1b35cf0719b305615073b27fa4c0703e031e61e8fba4c5c054034e6489abba91fe82f54e6dd3df4af9fe7f7d79874f522745a7dc7e7260363618ea14be18117895eeecf95f0ae274c965586b2ba9ac5dfb21fb3f9b5d6ab8ce5b84899393d259c00d0ca5d307e9685b5ca6aff3491d1d40b65262c4e639928ef6da29de8679130989f899162068ce043172deda67506d9ec4fbe2522d7993fc0fa0ff4ef265af5e16b5d93344abf330703b1213a73b69a01cba020b31e9bd8ca089ae17fa196468809b7764aa74769df8375b5ccd60647d96b106feb1ea7629d0a2551fb255b48081e96fdde25da312c78d48eb60457c98d81c406839054815648ac1177bf4ff905144cb870a46b181019524238c1baf19b924402cc5a2dea4d3cd9861372b2e24ce7dc77ca4ac1c065850ed033cb11a2c20cbe86132274b9b77e4ea4c56d8def895070d9d473abf464fef80a3c7dd7b239e7347ab6d8f8df412b3808477ccfeea65de7436012f9dd998b94a8c51bd2d59bd518fa50832abe80909b1e5aaf60f9a033d341611ea9248e57c83a53cd117244fae59c37bdaf70375fd5a9dc494dc4eea99ae7cc594308cf8de4c52fea6b68c01737bc98de25273f17956c335b41b1dcad47c507d2701f55dfe92f8a3747309f4d3038ef8a7c04702f689c35c19852e337c82fed79128be1921a5ebd2ea9dc8c3a629cc5c1a4518d997ef63687cd44f169cc4075189efb958d375d3bf3a500aa5705ba4dd669de8673c1b4e0bd51d3654f2cdf00ea01d71b4bb7d3878229e262d8e8670d8c01330b5895922589defa6041f0db95ef99c89fda99dc91ccdf00317238226e5df1aaeb66719364b7de3dc64a8d7d859a605061f4520614a1a9d000fd21587897f9be452c154c44710247247ce3a14083a4ee57a8b806ee1cf90cd2a7b7eae3a3b3fc7d66f70f104115f2aa94944ff443bcc5aaf3b7e83e1a603b995175a712c190bce3e6f89d44a04a51ad43d060c039d82aa6cf67b16fd60ca075e5bdb8278a9bd0ba0671761cd293df9069abc062dc18406ffd8744b700bfa79b5674dff55c9d35493c0be35c48399c6142089c76ab353ffa700ab79c6385ba903c192cde900b32faa27001e88547eecbc164a8dc29f142e03a7032387a92cc4ba271c195f1df49fbd2b2aa34629765921700d99c19032d11677831670fdce838308d8cbe4047cc38e7ea35f96194113ca2eef4e809a6616eab19d09aa7c1319616de7a4a4b689cd02f7dbc6359123d74f63478ca0e86db9c9ccf1e56e8408a7f2175eeaaa728a5bb8dde703e9dbf047755eeeb3cb2ae817d33946bfea87a188f61a54f8373fc25f2de9a0c2174f2b5566f193758676d382509657075702b0830bcc201a60c2dd1bf1c2cc51644b6877e24efe46ac8665a2b85f65941e1355443adfdb5827e40d7d37601be6b52845fdb3bc3f720a142e259223ca4424676bc6d45d8f8149f51c2afb89d882cdf52525bec7a2aa4f0faa8b5b91ab81bd0be017e17316d5d1d384eec9139af168982164b342bdc26ed033b6bcabf15757847b4da190c0b4832a1871d8ecc15792db8bf4ea1f48fa1b05097e4db645fb4e034dbec8e1abda51f65939b88b301b152699982e21c444349c91f8a9cd153d7c2ce9f6c2b16b8be393a4ba70e6b1725fd77af68b793fdcf80d6dad2a35c27fe86fc0ea0151ca4d6a3095c944393f6567e8754c17fcf24bb6ccce38d5130b811dfe832b834e2432f9fb94f46e06a061e8451bedb938351e546fb5418f82ca2c53ce9c2da09773a96d75f43a7baa8067e2bfb486d2cc6d837e3321cdc213b58c76ecee6deb7a808b963ca7925a5376abdd6bd189374666f50f627ed047d9c3d262aa2c537ff1c884f542741f2262414ef7dd5bb87ff1f117cd56d051b7dfe17f14fa81f3c2a67a33cf896e30b244625c1e4bc3abb6cf7ee92928ec874f2b51aaacbb68cd072a2aa3593e58f9dd4f992cf7c8fb483c8712b81a958b4b23dba5dba920032948c8f356eaef2d57860d5798d25b9918c73bcca8ab13a3ddca760f37d5e6ca80ab5074e62b2f19ff5f1496051b25b7f6e512d7c90f98dc4b3d2000a171a9b414bec04c6171af1132875eccac8eaa0a1abe8072657f8d05cc9bf5e7b594a68920fc3904dda31e87fcb421a36285763aa6ce5d5b1aec6da57c3de6cdcdd992ddd43689efa937e13d66a6a1728953cb53bc15052f2b0ce685cf9e4c217d1802a584fc3222acb563038660b55358559dfc585707744527dbef8a1cda571dfdbc45763dfff8fc96052e141b94ab271e7c932a7593fdda28989addaf8f394ecead8627192087b39c488e2d068f886113098b3b058e19db08ab57282f9a769db68c4c0b21524199d0099a8eac8e21a0cf281bd5b6c37e3789e4e32f2cf2aba9d7d185b2ee3c4566b3b377a5c96eaf8904321afed28fe8d485ec485589de8a186c4feea83d02452357be826f1a5cf2c6d3ae15e475060db23f730a651466bb512f77d06dda56a346e05699aac88a2e6a159ba280eacb9d3b5f9f5bc184660ddd07482fdb6711d0df91b2ce184759cb47367bae11d9564e3c2373028b8f0f6c1af478d9265b10e463951d55fce185caa3c9c1aefd430a3a7dfda50128ce868d517c9293127bba320a8ab067f080bc29c636ff36e11aec594dccbe129c74190f425763de75d6cbe9bd6cb229d518ca582335973a9fea71b23d23720904668106a40bf65e74f0360b875b70b08fb7c6318814550c4b53eebadb1f1208b9d39322f75c2ebe89d41de85e80f13e75a1dff3c097e0e2291a7d86a8f49c893c38daafc90f32fa8c23a032b179b7038f7bdc003a8af2c5c91e96b360901c77641e29457a9023552c537c2700bff8852a2430578404e0df147c06ac50f768d0970c148ce9e4087a81d6b9f23ff4d8b03036e0aaa4b8d0530d070b1e5a9fbb7d590e18bf33ab6c9150efed908f12e380a346f60803bd696eb233fbe7b8726d87e54e25584ff9ee7fa1824dc44e45b2c315fc897a17e53e3d47d094002fda70f599534e4310d68441ce042b13ec721a305a7f8ae8cf444044de1987b7f759af9ea49a64bf2035596d2f7b087b0a661572838ce9462fcc3a2b8b29ebc5001cfa7d2c80f6067f9a8a4873432c17f041b20add11187538f0a3455501771a5cfc56fdf42e1405166c663ba1c007eb08579cad2b84e390405e99f9028c3145d37d655940e003989cd096f433fc0de5a0ec197fcb6d55e90b27164f77fe2e36190aaefafd57e12844510c834e2231e37bf0d496c71874171cfc312dfca681fc230669579fa70dd3c99c427e91f20a015fa8bcf186afe5705d7f26c25023335db574a263852daa37444bf2983e13cab3768e24972f762c5cd58e71850078f5605ff3a3fe2ce49bc37087ec3c878d668d18db547aff15fb9e6c3d488d4fa52b732ee4d63054fbf5246c4b9d82e7c31a0a257d076f404af9b2da3f18c04e49e115b59e666fb771c160ceb5725aab8e92276273c5f1d45ca8720f482799d2b23d2649e8a421d3935165bf8ae2a17c54ca23fa24f61720263b6deb94cc08d11e5d6ad6100bcc2794de45e521824d9c472dc425e64da4b0027da7f06fb77d6fe6dbae23711042c91bc999114e49593db0553c16b08d9359d6a60e1ae84b92662bcc7c1780d46b99b470654c1033485af30b47a6111fbd37d61a2e7375cb84748d07765cb180c28ac874d6fcd2b71208d2753c0af7e8fd734a838aefa2ca1a6abee0244f43a8f7e13b5b5c265c0845eca2e0fdfd8c363619a716a3a66af520f99c2f808b21e594a73f254749a40731dd5ec722bb6873d1f5e0d0199506a4a66bc8c99b8b951b5dcd481ad1842d01afb2c546fec088c0de88967502f9d060f29bb188cc187f53fb1effbba22a2ca5d10562c09333bc11ad181fc81de3017803f4a44cf601090c0d234ee04b7ceee5592e35cc742c6d9235878760f2e0c9c710a5253d39b36c55a6f082d6494b506ac0fc45c62cd482e2d1779eae5b38474018410c6581fe3e9a4333cb4415c784d8578cdb6255ddf05a321f6239fd5067f71832eb5c14ca71346ad2ba480bb39dde25645df8127897fbb0b7cecaa6dee3ea99d4a6ae0e7fa1ccdb50a480b4b76f70e486ddd49bb36556922d1e230fedaa4c6798baacb045daa5ced184504b2218b53a3b39f074aa8fd070e4990dc3486d2354112468ca2b4728dcdb27db27fce6fae9db2491b471974bacad0923c1e76b85d9e9f14b0b25cbe2044f4c84da8e463b9eb1968e88cb9282f5c880f193fe4a4a999526c91e69273e4924bf8acc650728fb49874bafd708a5903677474ec02efb2a2c4e9bc5bf40cd3b7b49e9d17a9d2fb834591b7b807d212c1a3cba0be23dc8a6c3e6509bf019adcdf6e0b4caf8983f25be4c0d635e885730ce417aee69478af574331d5e8e6cd6cb71ae811622fc63ed671e09ef36c925c4f35c3abe59a1888b3060dbb8770472ab15c34db187b3f1bcd146904a8d1564779b6026c03920d549bc41e42719be24e0baf5feccc551acdd2891d5b9a59c3caaeb792b659ba56c2739e37f90dca9428fa2c247c3f5183811a12a7febadcf051e55283d2e062745ee314a464721ccc0b9a81597ebbe120c7594f23bf31f1f1c068de3e8504f0df677c87eafe55c2ec2792dfe664ae158af46141aba3ee208e6797a853fb68b4b340130ed9dc25d225868f4f968113ebb716e7f78674615e67a74d1dea49bb6649ba3ede53af8347798e2b7f43bafa3b0d8fc051a8ff23b2e35c4ad25b695324fa9a86b1c40e086c4a51f7cddc55f0fc778ebd372b44afa658cacbe32d3f6ce35a4f64e59d8b7260c941bdab7318d2ed8807e4171ab609a42ce61a73cfedce653ba908d3d0628fc2fd808537af36bdaacf6b28841472c3b66fed0e95e83f5e60226588e313d43df9f25350785c8bddbb2418795e627bc13661d14cd75d976efcb3fc14032957cfbd8ab6f52ce687d1938a88ff01961c11f4118c48c8f12b2831677d89ba4c00393814a836e98eaace75e609698417ef5d8f8b027d9c4d7f03079a093b5db6a849c1c713fe34c3150259925613a1fd6a23d7792ff3bfd0e5b37863cd94dc6a044c2589dc1cd5fc74a8dcbc06e2c56ec0ebb581c4e799e01f43081bf65bfd2200fdfea4130f69ab3be8023a5d47395649dd30a98ee025a5ad0e4d012659c78935b52543d50685a6a8475bfb5249a8d105cd9e3bcb86bfcb428502380651daa0d48c4b13012a50e9528dee861851529899f27c3d524f9e49dee392a32f886191f7a08125c0c56c6aa7c5539c45708d6a2e64b53e9f00a2476adb0ca3f3cd61d2efefa4c8514991f2417e965f17a49d08c4f28efcdbd8a2903aad967a465b33868b4b7d46143f42f55ae0c8b6f22894dbfec4c46bb106efba424e692bf36d6caf1f9fc7c0a09232170925c22412762d4af3872ffe541d0f443c45c1d32d01a23e62fd1d902083aec4b20d3d81c108b0c77357bafb0575b4cdf8a4128d46274d33771821b73726cb6e1ac3f2af3bbb4349c51880fa65d69904d7f5f698fbfffef283261df677b55759a14465410259693ed4b1a89e12404c776cb5e606c3a422db90043e88b8f10e7e64659bfd7ff3c9851ec3814e4da532649dd26e6144ec6fac8e76598810e56a1cb69b3932c4487e77c964d5ecb96ba30fc261ce2ff3c70ff9ffe81b8579148d3f4d6a685efe7a1c9d41d3fe2ab70f3a730455853a6a1edd17e78dedfa56693e5d0862025eedb704964f8fd21de6f8bced6ce1aa45874bd89ee87ebb4c922d807dbc6522d4957c4b11b03a31c635a10652e13b1404a1ce4b8f372b202f03fbe261dd6554dc7f68f22272c10a862536ea726780b12753fc89c7008e21f75a98ed81ae2abf474f0a6b2feef98874e3d358d1e48190e991381f97a63da16b0fe1ad607ae64fce938d1e7900f56117955146f5b4779fbc0553403fe555c85780e4364cf4210c84f75b582e42499fce7f1a6293193e7fa75fc2a8d25468aeb51fd1e8886699a902649245558ea2f282bb6f49c69ef6bbd6354e696b1f0b9896293126bfcea1edde4468739c89fa514270a86a46e6284ae1cb058f87253dae1623009966943cb30b2b94ec427a0ee4e270714eb5ba400a470e054d51b8a97bb79a93ca521bf62497e33116dd7c39b56b2e949d84d86580506b9426284cd56c4e02b2cc460ab58b86e90ede7b3dbdc4f4e12402cf5d2d9fb0936798167ddfccdf8c6fd18d62e2f6661354444e2a8d59c0662bf131df12f8851f05e465a56ac569edc2a3b9e38371ca366d8290f23b59714b946a536dbeb62e84915f5d6a87f031d8adfa0071deb8bd78006b68f5aeabe5a3cc02b56c55fb1eef8251844a10f0c64f07c640ed581ace81b808b8a25c54440f81fed450b8a9626d1d3738c1bce0bba46285510169735f53debd531ce73e13f5823fa4376865731fd9e23eb7930b5d67121f30459ef9d6a9d2b7a9c8634718c0254eded33647274657b6c15195e438eb1adbb827c732ba06c750fc49f53e5d7a189454005e10b7597e0778dfe98644da7280f11f5543861f81bd95205249c9d5c2c0fa57cae250dc72f0b216827761783ca617057ed115ae3b1eb3887bb1a8acd83a322122d0a45736db179e60e114955343583448ea788897914b7b12137ba1725323118ba7f183581b10c16822b0f539d38b332b55bd5f3587b43d5b8c77205d17a03197badabea69dfef96f2e13c9ceaa864413d0914d6536c6eb603e52a0245fc71df3142fd53fbd78e2e3d7f4e32b61f4ed99680e1da7f15f7ca936527811a4e7200d8a355d47db66ec304d6f33b7198a69cf7b2127f3ba1c15f1463fd4898f6a08dfb4fa44b9a359cfc576f8797a9fe110e224377e47ecb0648fecbc9326b6c93397e8e31d92dd4aa6d08dc9f7ead78adc149cea8e53a6e3a8b9c86db1ae8647f5b06751e29ea6b573a4a4a3da8c10533651e134ab3c35d15eebea0a137ad21f45d44e7d3216786de15678429623a0348db53047f11966564e2997be5c42722457b2454150669db5870dabe695d8b7e8d034e38fd1a2d0b22e152d3b400fa2c8666ca0e6fbac51dc570b54e1364c2832fc038fbde491bbba4759820b854270b6f5107145f15d6f167573ffbbce306a0d67ab52784949c3c2b55b8cb6971676864006db24ce2d21a2407570836c04493b75f11eecc9446bc32766cf695234ee9f1292f616977f45b3c9e763ad382c7510d18bde22e91e141b186f47eb221234f4e3994198ceec85138b3d13376a84d9723011d54f4ec63ae6f3d37ba85e04c6b315e8a919691a8f92de44336fda16d8d5bb355941db00f81da4294d3f26c56705346dfa0c7dc760b1f25b8be5ab3e9347461320fb1e079d3917d95d67ce32d7e185b345c90ba8cf8dba60a177fada24cc7769f48b339888708b4703765d0cad92d6b91391b40388875785c75ddb33a4c58b30aadb35086eedbd1ad622d94ddf5dc23ac15941100073e645ccdde6b164742bbf221adde8a8321d89426465a2c06b29416845c3893979920541c13922cbfb110c454e8377168c0736238c2ac679c6892796f509ec33a559163e1c071000d0696df9ea222f77b1f139b95cbf20e986594fbd5da8f01b1d7bc07b8015a27203c2202c8634793e21354aff3805b0b25e46eb036907cd4ffc36db58376ed28db0721382536efb4f15f1618627b4d1b65b47166d513bb6e2cc2c8fb1b38695c281b8456b820be4b48784ed4649da587574625b0c79dde7c2f548a36abc9a8881306c586f163031ae0ea48745c7e0350664b0c0fd2badac2718535408e8c23348cbd7b4d47ae0acfe9a91d92bd78026ea9508a5d77abe0920bd177aee6255e951beb1c9a465e2c9c78739e0a4c5dd102ab03eab769a91e5bc2599bab4c3ddc3cc2571fa07ff562e31e4e8162542577977f02d2acd4882ded54f97d61b3487173ed8518a83d787e5e46bcc31998e1729ed7c3867f8b7c0446d61f96104a8e4c6b000891647a979526593c6bd8b1281ebf4f49a69cfc358aaa67bbc5d09371be41d85f9bde0a527e7d0314c8bbddfe517cb73aed2610a8c90c2c92f6674166f0d75394296b253430d46e6fa2e33f401a7c608291491d278df18fba86641f8535bfc48c7fe52c02762e7b21f5b41b98c472d7390e8e9de7234acd2fc88399aa0a3e9111977de5ec327e10ab1970adcac4af2253baf5f39e822f155ca1d5011525e476c3aed95c6229e25e75bfe6f7304a82e508d57ba1e6f44a6b4d8f18da076f99a359213361686d6844d7325bb0152352c754f0a76a0e5c055dabb323beb0c81c03011f8b0e6a27e20c04fac1cc78704855f6d569eb5331375c7bb0a5a55771528018fd583be06ab19b25aa2aedd09c73db10847cf6e84af2579d99f3992e1ef4a5f2f4cd3b73b5554a23dcb385be7e7731a5b97ad5ad0362e02ba41586636e04c61ced7a2dbf28e0a8c2e547f229a2ad318f003ffbf80515b183d23d7edbbdf66c4099d961730b11e1162a55f56fa435add36f6f5cb112232e47a778e81053149bf3216e476f3912d37fe63d24fc98619ed9ffa1ec69f8a6328b7e7b8d7e2168f1f1766c92fd6636ec82d8d4e95e7c1a195c83120895521c6c73b07d718646e865c114a2d7f3f4e50557f44d3d7d62a91eae9863a5a2ffe1ee6150496575fb2e345a3d7d7ff5f68bc665ac1f7130420820f82c9fdec3341916a307d33812a967d3f5424df455af1c41c41aeb283ee0ecfb2940ba94963695e0869c3be7b97ef3916a144953f6c4d531f621a916975dc9f8166ca83ab6b724e6d880d3b32824f7146b534e1d8cdfed34fecd618f6815373250edf5b0dbf5f521d01fe4262255c84b0a2a0100676890a7a469f58cc561def3dfc5a7113ac93ab15ea92d8094682c63b7aecb53926314700c8098e0dd6b5c1fad6732050f9f612ec4a0cbafb2ce4338ea89d75cde93d1c9810fbcfb1b9bd1a35c1fad98e7b97a2f8468193ccf09ca904fef3994163f4c493aa47823679aed42ab901533a5429f8674208201c2e39c1da36f1e22ad09c320ccebe600e7fca92d2df261ee94d6ecddfaad8b5a858ed22e3a896660432d782c027c6e5de73d01963e1c0f3e5724a5f214749098146acb720b55ccb40930b13d2f25c86d55a698850f0957c38b9582fbca6faabe4dcfd53d4adf98349907f10552d775ad1371aef22116b0320fee972e85559e9a9d75f1ba27206972f818244c053dda3994afa23b99e726b88a63ed709f66e31a6341f9c8f329b4afffa8cf7fdecb74d9a32fae3cf4b7cd33cc76bb2268ae6406e755807f1c2412a44c14fb485ca0f1ba0f618332b4f9ea00f5fa4db5f2d1b0542f5d7b18019456ec6d55e162afa93d1d397d8d211fb505c6dec56effa4186aada499597526e1f345bf4aeac82b582fe00bd135afe59482442c36518d1b2460dc6d051edee8ba60da243ac1f15684b7cd653afb95bf6fbc8428efa2679ac3d85ff48a7009e771c0e119139a8b32a032bb0bfe4a3c0fd8a7796687dcc59f21ce3316f630a18c25372ba690df0b8e47047467b5ae821f76ea73190417bc7112129c337822e4aff8281957a8c653383191bb8e7e9cfafce731f5aa459a64034099a8b571dfff2d8a1cd85475f4afa1b2ee5f38ac5b4e2fa3b241119c2fd8f15c54cf8d404a68992de39012f8bdedd3f1df814bcba5583b54fa479b09526602a0924e1c458f44c8d3cb96241b7091ae860f6d63c0dee6c6d0cb341a6f38c369c4c5148cc6d0f8e2970420141d12dcac0b323e665c474d6d8ba282e36cb44e330bc1fda6f65c1b65aff103a43e389a74d832a2082cba328072144d98f4331ff3f453d034290e78281d9b3be5db729ab35bde331371a8d586661be89de46f05c00ca583f971d0b06b98b1d0397cf88a388744b21931cad83dd1562efbb816ee115f993c06a6bb3b97bc37b54ced1d5053d9d0fa7f63016b5580ed1a1041bf99cf298d69e57bb13cead28de3f20896287a01355e3f555aa1d3a92fc49772fc714e0298b07577340af00dce20252f3052a40b6c038bfc5aeb85ffce7ef76a495b32f7b04db90cf9df2954facffefd583c3d8662c65898e8d4876c0b5b9f17dd22498c30703b26e17741753535abeaf3931cae7f569def70027bb32f8bc0aab9ee9a20ca7de61a43c5b286beed4dd307fee074891e9b9a932725bed9068c08db7265bfd50958b58b6201a634c8d23e63dc229b8184d279c744efd8cd28968424843110315fa81804f5b19b0e9cd0cb6ff7d76f1efcec44cb49e880dffc336009ddf1eff91ea4a462f5a5a6cccd93f284a1b03a9111239a7e44690ebb0386287b3c91eaba31d065f8181305beb52042d5eb00bbb29ec1c5421da483a8a83f8a22b1c16b7c7ea1730a42a9ffc4ed5207deebfc72c3e1081001d900d51ce031d556c04a8fd35bc72232758d4743e5032ae75763c3bfab0723357523fa30be7eb76c514a68c700777b100459f3be9e6129996b8bd98300d13fde7401f4825fdb0a86db997ceb6107b5acad0db4db916428654302627227f40fa7d885b5c21b9ccfda9bb50bf672368c22c2b0f1c84bd3db43f4bd277bc78285cb92e62ceb2f601e125b3afe1e61c74b6b6e9e5f2fd5121b2fce796fec7ca3db384b7cb8f1be4c1478ea8630a3988a0071215ce5e9d0f697777edb47f24acc5acfa686eac5dec96f1bcf052affc4f26d895d0d7a78f35b61c108c2ea58c6ea4d58983318e5f50a682ff2f4007683d81259db5e8aa04e65eee8e4defd77ab9b0032bd673e09a87e1c3b73c9704a2062146688847f793cea1a46006ff20543f59fc216a76ce7c427d176840a937bf56dc3a7e35bc9030f7e5091bc535e85f58b311408dd0725c5ddf46dce9057a4cd58a6c7f632e608cd8cd35108ab095a46f4ca0ff04491e25e2f54a83cbb32fdb7cba03035a4a50e091747aebbb556167c36375da81cc9566793e88c27661236a1956c6be772f980e577cc8738b97fc260c988862171d28a89651042752d3963c6376dc2093efd19e202e7326d4a7b42274f5c279584199ac752dceb1c3b4250a5736e0d8dabb5c850282b4a1f386d58ce391bd064a325380a995f26f9415015f8a45215399f5274b4a43af712e095406720b090a672f4ccb35fe44d56074df596472cd9a505fc27026fde86533306f91f80fe7f4479b5cd6672107dbaedd8c51b62bd2b6d732183a38e005564776694d724270284a5d01a05cd8874ea111d9480829cc89c8afaeb276cd018678af7d33f3b57638450987e98dd3ae807ea070aebcaf004cba582e62525c13f0ec3cd75c8b349da18b48659291c95c37bcf64e85a7875e1be6f6b3855e73f45c0a219d676715ce262075924892381abd35649432d3112caa1fa381463d9394d33da3cc9230a317222f4f60e7541e3828f833628ede82ca2bcaa512178c927fb467918d2e5c89ab0e0e952c0d7959637f1d2970eb6cdd90470db79b591b2b952f17e221ca751d4b5a8c52ea808a98e02ea78a8ddf7911c10e3b6016944e1ad3512ec69bffc40c67f944c83b318967900a692d47c70d3fd16add2c8b80da33add01414f0034ffed94c4a2eab3a9048c314117ef8db870b4cc06c93dfcf270be1727bdd049c047b264645cc394542d8624c10fd32343dc155b39fcb2030e10082b84c0efc9e484aef8ddd0e91cb489ecb1816e6a4e91f142b5b5cf189a5ad06de72ef43012499ddf6db0fd444791af3803251b1f5d27b5776fe0369171739a1570359376776264e742e95478254fa8c0918081f1e574bbea9c86c097f99277625d06271edc8346dee223a5c48902c823c254267cebc69e51ec81f3db5f9ae8dce2fccc48745c6d99bba378f98d6e76b05609c8d0e29700f68f314ff60e583f79c315b73785ebd07246afda09187de604c2adb359ce5c66d6f3b87be1ecf515ca66bae95d9a681f0457750c652221fbd5a78e2febd74eea3aa9c49986f347b8b6f2bf86a3ea8c07cd151c3bc82ba603e4e7e3b1032a7ddc6da2d5e1034c7fcba2b3ffe906714cc52e6c3d978c7d23afbb93605471ebc331b27f53e288a34147405931015825871e362ff186ab84cd5a68dba2497ef2ae2c43234acbd5f1831711ea555675779358f1338efb0158ce65dfb0769cbbf6b7fba3d7c970f8b72f8cdf00944ef13f84197fb1e45d20ba11bda5c7a1a623711ec031581826ec7f7fbe68dfe3768289962d767c166d86b2a2af0b4755f9a5eb90053af9eb11227fee2752870be723057ad1a26f6293c87ae68bc8654a2246d401e7aa82bbd4e75950f1ad7e8fd2dfa2ab2946f93804e785eebb3e2a6571a4ac0bb47f579c33ea71486a6ddc733d53403f8c95529fd426da112be3ed8f60bbee7f0f37a47e30ade2a0415a08a9bcf38ebfee9ffe08befab094a282c54bfda1e9f598752ad38161c4fbb9a0f2e5a988b84b9b052bb32a43970237d57b56673c3a332430e732166f8a0f830c335feeadc2b5dfcd1ff9085567496acf8e6dff210966789e2246f2352b1a549177b9e1fd917ec1252f064a6d724e6bf78ca1ac5de4e3f23d9f72afa8bead92355ac46e5d8a38d4ac665108a9a699cf942085e3c4ca3898aa6081bfaafa7eeabb2f054081aa5681035e82b897e32e9d317349f90e1e405f261415185eba99c39f61a196200b154d97b450520626d95582b41d6309bcb52f925876b3d37b7a6dd743df1c1281dda46ab735c8ff718441c6efc92f76018823d52cefc58b42ebf718120b13631172acc72e525f879fb71918315292310efe7fa320484dc6d594234d8198317171b8225630ffafd8feb4190f282a7dee7d5d4e177224a402c953522b27a3346ace39a749dc8a7a8cc9f8e6ca4b55480b32ab0a1b1b387bd819d447da36c3d817d8ff4dca1c05903860051e36bfe3edc02ec7ac3da57e9a56e22f433457383269a620e7fabcd398a1789be49c3a74c5705a818de44ba42fe1b50fb9e27ed589562a1283c1f6513f057fbb898b1964e8e038080e5440c8d4e4b0a55989f2350bc9639f7e1de5ffa701c7b8c33a7a9ecdfc6fcbf179dbcbeb766edf3cd4136972eb93f440a99d13dda107cc82f1a295c94574971d2d76126150e3806cbb52fc81adce67a6f68935c0cbecead9f049d56303ddfd1d9d6d9cd906ac08ebcef52491391283d1d87ba55c1b5eaaa2d01fc5471643f56ae750ca48b6e39ab8a20d4f7399fc8f8fbf384112c989c1ead5a87f6dc1e1e605c9d167bb2ba78ddb6d3685ecaacb71636e5b368712f2e16c2608241a3811472ef974d18196c6918b9f2bacce65112f0c067c958edb36b1b86f73400b1072c67dbb9d3ad2732cdd2924ff76e4cba3e645a20844a2d25224831d006228103bbc7dbce3ea82dbdcc1451b653877d53458f364e65e5f9f27224aea0ee1ff60f2b88eee09bf98fa1f044e2ce38a5ba97cdb7a582cc40c30d807297d7646774e5d97463b6b35ad0a4c694b002d940fa130d0fd57a71cb90b2605c876d7a2c9d3f465383eabb95bc6eb1da4be4073ef7da8ffede2d4decdbf8291bc30274c145c965aefe60f3dd42bf81d90a545f7479a774c9dbcff715d40451fb18e738e507478c6ff78067b9763ad7d541b1bab079d47d16c821d00bfab9edcb533fe53e3269cf60424b0c8042408458dc5c1bbc8bd82b3e2331aa67494327a81c88c189dbb7e81e9e7ce73e1adf303cd0e219780d4f1a89572dca58adefbe545da4a3350bf3589aa288c5bc78646e57dbafe1cc48c73359ffb811ec25f65d1005b9f742c34b1dfe9c18ec41121ddaed676baa21585ecfc29db1a539c691c432fd489c51d0a276ae1d0349a9b663e503dcea1dfab97302aa3acbd1e00078ce072d5db5a3d619a9283e154f4f233f029121d59011b34e06c30cdb5708f0b736d4b4f7c8d06293a571b4a8029b9a00055e80abd35e05161106473ac06f62d882599c8706be3fe5ae0d9258adf929b3ca252db18ef91f42b01b09c84d35c7335021f216b004ce5f13ea908d5ca0e8acf44b28808be88181f07a7e31722ebb98a7d76adf4ef4141bae401227e48e4390e1975d7945f46f3d8794e2ed7309cd4c5acf386727ae60270d3325c949f0f8ff9872350949016520061cde4bd91fc353243cdab346d8b25894992ac6ae8c1df1667156531edbd1373ec4775bbf3487e60e5b5669d67b3ea0c2f4d9c3e4acb4ed0964ae57a0af17a885334255e679057e66fdc010b1a6877af9a944266e185605cb0daaecf5d76fc7ba14867a77d63394fcd5bc41b9dc8fd5ae1756445bce31670672a2419bfda45f6cf6028facb059c29300b584ae7aedda9652b0ebd2615bfd659f37e1692e848b8e9b1f771bbfe8b179c08d8629487b758a1329530cdcf89249225a9c01cb91d3eacf72fb350d927b59c7fd5224d8f4c6735ccce2a907dbc6659e0369c083d1c5c8e6bbabd0e434a3d7d0316f6a997ad0e481c27f1428b7c94d7c9b041b00a6ca1d5ac29c1a4e7a05693cd7a6e53c31202d60909a53df7cdbbc34a6097179954a429e10952dbfbf1deb8ca6d0135fe2610c271f3a9db4d4072b09efc67e00dcc67bfa160b8084fe597882eae78fe438a2c99da3e0c3bf7f3dd7af61798b8838178c7d1abc5c1f3aa7bb4f05ee203cf96b6e6b9a33a626c524a79dcfd2dfbeb9b22a99a0a2588bbca60d5ed04befa0878265c4b2dde9c59d7c3059ae46f1ba456ef2a0f0c5076d0f70aad4110791829d94e992fb1d0004c6a0b02c1b453f859645fa3973ca8b3729db1157cebb10a311140eeb65a7c245324924e97327f569a6adffec6166f0e081eaf8ea87a2dba4d5266e1be352511f384ef5b4a335bdcdeb47734c2ba4aa0c59f68d8da8b103b1cea651969b42f645cfbd90a6c0496eeaa0fe9d61f55c449cac9f4c0f7375446171132424f5749948e5c44e110326ff31c3c73fe54bed81b81a21d9387b12f9e9329fd1d39eb7664578705d0283376a49de496bf7bd3786c940055e6ca5371c9cc1ea2279ca6aff0569e813b1b099623951a76503408f40052f61063ef53c4844de4de1ebdf35dac5d89bbf9d4cce0775f21a314628a1086f3327f2409d4bdb0023c719dd1306cfc7df090ad054674fe5c4ec421918c7150b347513a901da1b42c2499a82d2408cc9009479161a055039464ccff3fa605742f0871addcfe26e50fd9e8f77e51d5ccc7587bbc63074c55e131224db5718eea58bf8e1c46772a0bc8eccb1d6e3d81a0fc1c7002902acc248fe8566de931a0b62f78a1450a35dbc7c1b0a9c9a15406b673a6f7430d5442667f80e9b21e927615169f20948dde4ad4064dc51834f958ad53702bbfec747d79a6b3764fdacb87a7a778f61c882a5f8d305a88d7504e486b6cef15050d4d9f3887a34c763c99fb208df883356f896740c72c9c25c0bab5e5eb35fe3c912427e519b7fc1f2d2b942d9e4d5c584788e9575f53593c7c14c883730f33fe5cfed18bb25f77c3079f6ea95a041e15171edd39ab3e79d45c355426614733cf50df5cc5e8d7d7f88ba53955a7ee527783bf23a72275f2cfd350d4cca6d06e0aa9c64a17168d875b262438ff17a625e4a87af10010abdfd4a94d523f9e798f9fda31c61ea5ec3b44840bb5c14993136a98a59bdab2643cd61e026e474e73efa5777f05573204f3bf314770f80411e7ab59dab7743c121fc05b9a11badf89249aaf5d545edbdea07e85e1cd1881fe37874b660a15ba32744d83f04bf28cded464a99efb0db7b60b315f8029e0dbf193154dc482020f336615dde4b4b7c320c537dfb646f3e87e2c4bc244a7fe98efcae7895a0b13ec9ff327b2cd89d7698196c120dcf638dbf472da84512ef64d8f0056988d716afdcaf35abada92d128c451627e4a892cb50939417dc7f66d5810b6e6b773110aafac8236899abe21fb6c899896310c3359010ac1208703c5bfdec65301484d2d63f0ee30ea4f8af48e48ec6161eefeffd7fed2be09b4d24db7234701d50786f11336482cf848d5e1cb621115bedf8fa7503543e187830bc7eaedb006eeab6b851fb4639b03e9f97a9950b984fe2dd1adc4ed7a5e23e1aaf61afa58ffb992b52d77abc06d23c99a19d252a17092d16f2d428cbcbfc4bb70aaf5e7ba1e56c9c2ba1fa917d6a317bf07d7e1fb41100a9f5cbf374fc6cb8ca8fb88203c9e3020e0fbf298bf6877a59536b75bcc373e0e8207e9876e8e89a1ff18bb1ac81e8b4dc36dcded425b43e86d9a7d03ab199405a0d2a9e3591313ba23564570d24deb35b6386e913e7846258f817d7b734d8aeaa2225b34dae908a04743231ae4d5fe8f45d3ca42d8cd513203ab4e1551dd9cab73841554bd1f2e071ab6d35ee42c2d3bab944c063baf4b3e80d5e05eb9e9a2b81f5d87923ef463d9198515e1d39ca0e34d0cfefad5a2e3652cc69fcfa0cd971cd9d25b2f7e72bc78d5d7106f69ee1cf8cce40ed7fef18b6c2d416fbdc492bcd0a7d217a648fc93eae8d9e2caa6e8adc1472edbe65d62d07c83b0c734711d6716952121d4580674020264e6ac96b9ab4f1be85c253c5ab56a56dc0d0a0aae489ef4448cdbb94f8c974ea710188be196b3a67d76e4d9a641912cf70d2a90e73d505a30058310bf0d6a19fd288e773f86bc38f8aa86cf4a50b6e1aa919cfb1847512d47c892e8d47cbc11bf2b7122d3930bb4b7f82167dc38098a4dc4242afee2f8f7fd30bd419dcf1c6254c56af54cb1628c10a0ce366b1284b23e5c07798b432809ca838487eb2908fa45ca5db494bbd474ef12c314070573a1cdab6c2f37d36eca3e6d021c5745c919010e704486767d6e26ba8a80afbbbfbe8815dfbe53202ae37e75af786d4efa781787d1bae5979a5bfe92c764face32bb826a0b7191e598dcace582a3a2c947010056269c1b9ad71b96a67eda7588b43dca031f2f8501033ca2e6863c7d249b9725a33633dab0e81b9c2ba06f9d88ae0c616f812dafa72d82fbf7ea4891a68e806e4c291e122f790b1a8ee2885200f6c9581e58256753c9789265e1560810faf023f8e9bbb335d3e65a477f55c49380a1b13328d7205218eb840b7dd095f3b5a6bf10654eec52a532f5376fdad46bcf77c27229f1e2879ca93eaeb334fa2a285e0928403e8df46297d8eeb8df62f1a2bdaf267d1b2d391fcbd5a25aed3b466e4f46cb4c733263fdae318fc3b7b2f521c232dabf2bbc26e93608fb746d26a52ab4e9bf451a9d53e922ec004eaeba431ad7bfb067e2634377fa341dd07bc880a46e09e02653010f74a04deafdffe6e036fe64d49b4346a203f2fee9c2878dcca8ee6e591b6876ab8e43252db2021b237e9b94cf7e619d619e69110313a8c45d1edd74d00baec652c3b851263c76c56941a4c47e27555b1b8c5c1cef69e1cd3678e1036d92bfe2cb6273c6b500938d6bc504b3ec1847c87f75ecf28e5dced4e67d357c143733a0945ab0e6d4814ab489be0793c869cd0bcc898f18decf54920334fb0f99b4676ab570b287533de272e3fac12f51496ddddef6c4a84f91450732a68a45e6d7ea3bdb787ab11e3798e417e966ffbc3e8e05e298edd2e16d066d7b19267d45029d8a5a37c291131da77e57ab171e44fc10a58f9d57be3a73115aab9570ae30791e8dc58bf205dc8acddcebc810ee73506419ab709e247fb645198eaf087c6cb2146f9102fa9b62b2419c0a4114e36a6e26b47fbd1bb6b62c45acf1dc9a7008f0a5b270bae05e1e177bb1deb2a6972e750e14098b84d6ec2862d073b51ece23c9136f9589821821ffc0cf7999a7a9574ff322f351e823da86b4c52eeb7b65a1cb0fd14460f6a28c127bfdc8e1f4407bac427c8d2ea2cf5d0b31d4d8477bed3b842706a9749c4c151a4930eb6de49acb392869ded73004dc313bfad0c14dc47554308061a948ccd3518bcc588b167de82fa8e75e7df65c88e5c19240c241a2ff9616bcaafacb96c2fca2d6898cb25b0487789fd8dc2530f90e23690330b176152fab1bf204a7a944a5ebdc9a5c5aeaafd26bfb0f013a2ee17fcf669fb540bb34c04730bac9bcc66f907ea3228ad2af8a8f73d61ab0899a29c6295a9f110c2477672363c956e386cb5cbb7e134937466a55d7d654ec4c9c30f6ec87ecb56af37d02c05544724c6395a878b0317d4150474452ed9424794f489595a9cfc7bf6c07d9728b6e5f1211a430939865bb75ded4e44cc1d18507a64201d1f6fed3bce2fb218908da33589414c6f5350bd34f0f2dba484d4399cbcd2269ee7f02286c0463ec7d99e110c26c173d0d96218f91fefb40ab402c318b22c858e2949c276e77fbeb1c6a17dd5dd6deee18b6574410429942317306bfce6b6cc322aa586a608f635b93e9b63df0eff9b30e6cda4fa7938a2317f0c23f6e8a673131f9a3716d130d558f7e29ddd067f7bb03a481e4a605f8285c9b5317fb3ea13655f76a96154afae8989c5877d29f29d33bd69ca706f86365f1528575d943cece1e3bb525e0e1ff7111480888afa7b2b073729907f233f01537d80d23f1a46c6d0804c1a33e8bd81b1d84fa10bbee007fa8d424e2f79704a6435dd825e9bc4f9319e041ca37b58ba12e450b55bddf8196e026882ee091725aa51313ec1c65ffc9b640caef86acfd5a190adf967548a1854243c060d96156b9311216f6dd5cfc7b0de970e127a677aef85817db33655df1a0981bf4ae69dca05889d0be23bf20b62148ce2b3f07d60bd8b4ca0f10a4fbc8844eecaa3151439f24323aebfe2e0f40f099400e84ab484a064b8b66348c322c439252252a61115e155a9a897417863f64be863b212598ab9efcc9e92ed5a028e3b589b57c940115e3c455775e52644923f746829e155ca681a2052e7cf96ef597276a968ce142071411f5e11473a9473e94ffbcffe9129a696786140e7408f9f8415fede19bafac1a7fced49c3758e41724831edd8772ed14b2ca59fd192cbae7528a097ddedf5f54ab4ec187a5ad1e40d6eff8774cb6827a489b3d9bf0d886fbb1f68b0788d34d03b1adc9315c99a6a931fd390a115471e1cd1d8dff863cd6d39106434f34427a004cbbf36d0a6e11be241df5b744d645881bbc354e4a3e0d92ba02b87fbf0dc2df129c393697176efead6df96fa8804412c5bd83ade33a2defaabe65331282607e30cecb5caf67cad4fd3c722576236972b771ed15e46b462f3bed5b76d011d554508c1bcc97197b96c5924e36070e2f6e5a3682a55011381ce3db2cd012d9b030ad4b129009af7f167d8ab9f3e8cf58b54dac71a716fa618f507d73fcd3e4e5a78c7a694172fd0d6453d7782dae9075ff7e722b56b7dc71e568f53ac5519995b2a4db554885d4f597f284d37c7b58dfcf2e8f17b997ac17c0f6a1310a02c1671780c85563362ab4cf316b5b98493fb4f863718169fc8a1c8ec4d675094e897ff1bdfcbb63ec382d3b812a729b3324db77b71e549935ef0c30f79a740cddfcea6ca9bb7a3c4fb28497cdca874829466a704f04173b5f1862b34eaa47bde0805c2ce4e42fe571f3de855feea5d7fbc3ceacc6452d7087dd1345bbead4af84c42bc30bb727111331c92b60fe3959399066d34cd4bbbca5512a26b31725bc7fa66c596b762115b990cee9f3c280ad386d159ef00fd992a7c78c43dac9ef497b3e01ab9ecf8f63d08f52bbc6b607f963efcef84e43f14bfea0d3c99791a9217652631704930ce74a19609e47252bb70b04460f4c2c2fb6dacf213e5b55b143179f2cd4262d8df3aa564cd468ed997ea4b2ba45804e12b47c71df0139f0674c58a8a7e550f939436e182a34279d7eb1154eb506dbc26fb036796d5c7e15009f79d9a7e23a8d7324333515003de7a4489d675e49312586328c275cf59140a539b05623d3135670076683261b651ca393b0d4f93540e40cb7bc8ed5cd8d0db8eb41652e7c50bec52b95a0a3773df3c5c3206960bc4a5fb8cf7af856a41c964b577f21c90867981b38698ed4c8b1fe67c9a49b101e5601d580fc4455b7c73f5b9ff498f5507f1e282d4b04787a19a610de91060d4c8800ea558bf1dff532c841307d04353ff53147d335832f137d19981fb88d6dcbc5795c0990fecf3c102d1976198aea074df630cbc71e3886407388bf840050b89eb8fd9cc354b5fcdbd7f9bdc91eed322f6ff0ec815dd5ef71a4cec0a597c136d4ebbddb863d46cec2e078c47aac3bfd21c85e0ad62eaa223ea1cbc406af9a0a0d52a65a669a490218f9c25b91e7bd8f6367398c08354f24bf0e4c50ab26b03d09fdc28e44d3235615e1e27afd9f185f2ccc498a2b1f1d7cc4715996e833d9b4f6fb547ef32d44f64418c3e44b9c6ca9a4cf4eef15ef26f19ef927bb83bd550f0873dd9df45732b333d3eb554713b3e7ebc6ae8c1ee1cdef7589d7ffbee753d0ed5b17065ec9d74dec7cc9d0f5653ac734330d74e368b2522d79156f4773c897cd20dd90f66088824fe48128220a29fe34bbb6bdec4c674d5c3707fb9e84924a3d33eaa6f97153347309a78dbda365131b03c7a69b52324eae968b37358dfb32c1bf24e9e999594e4cdc97328313c3b2713a716e715b6ba17912156de7cb79975ca28ce92c9a1710e8362e8f893e7d3e703177f2d11ba4b642bf169f0d0751cf278e44df3e7c5ee256b7a41568445ba416ee640b58a90e53bae7dc5dbaf4f0663aaf665deea800fce5802e7142bbb2aa3916cddbca83813256be2a7149825ce234ea957425baa0fa9c400eefda8c9c4a8bc8beceb948de9af25a4d434350022323f37271f47672288fd220096b0d214607c4db03d1d29972f661f4f67b2d4be04c0b82280d96a849b0c33a086ddedd0b5561740b30c240448753d7f788286eb3d82b6c8ba5dd9cab7b4ec6ab75e6668f9e4fe067e92b4dc5cb9115f76fcc4a0c4360581f23311d6d9142a79ffb18ac784690d31cf71598108601e81c4c57bc2599de95c320da1d6de2cef5acb92bd127a8102935509688609c07fa38d1ddc96cde22859f669505101d8f8c09814bde1c11445ed927bd0a3fab6ff9a16753cda20320cd436c5e247acfdc34497dbc6ae91a0e76bc11f33d0183e9cace92a7ca35dd7f64a0975a081017abd9ad1e95db903fb9e98bdeb3979cb3205f7887f5b763369208c2cd74a9c3355827c3e36c931046415d6f0398a90b0745a2f02dffd8d0f016adc74d76316dd4deb843f989dc48904f39588c875f8496e982f803828aa6ec24ac90a5953a7b7d409b2535d27dbd8848658e16e0181ec761e3e1ccde9fb29545fa789fd24a38f6a93c7943c9a6e423c8e48c00c3f2e5c423bfe326a294e0ca9b7460980a821f87bc416dfd34a91d276425aa0339c9b0af282c207420e60cb9ecde673f3acf0ee2688dbc0c93f82137223082592bc26029402e18776f7b092b29fd671669e0b2e95dca1e02a3e8d883ea7daa5caa918bb2efbf6f6839f0b34d5c0eb816cd2c3d1319b8b97028a916fc4251a1a1d397987182df86a51fa121a2e921358324ad7f6f30f0014cbd598860869dc22c63d4c4dbd516ed3c6f6f6c90b248ce5a7da23789ecd05c5f288d6771c7c94c6e9bfc2f7ef4d4a814e61aa679259772af83d42f473dab6e1a0189b0e284333c611380afc80fee30cb88928e7eb5d2f3129bbdd39fef34513ea5ea87caed0191fc1f640504566390518da34ab34fd34192a1cbef78d6902249a7cc8bd6bce6633c9f6eec352c7b4600e34f0d5f632ab2c83f8a489b24dde510deb056a87289144d9096abc8461dd4a1ac3251bbc2155ed766d1537ce0158e7df4cba6cd15784e19a76705f98fd44fa0a6f385942bd58d8b114de5057fb3cedfa9188d12713d1db69dcce4eab9b5526f66579166598dc633bd973f5b8222cf53f300b287ffa2f8607eb79daafd76c75d98d23df354043ac4fa5a18f59214a20be134f5523ab3fb8b8373d64e498f39f31c7d653a276e44cc60d881f02563a1f8f4dc6901f859a9852536f63a4f31bdb751f9ea8c407ce6ebcb22918238111c8236fb5c0f47ee18dbc5516c59a3e8690fd049de33cb3792327b7c1d21a5b467f9aa98ce2579a55f72210f6af6fbc4a2b7b6962dc40d2edf0abc910a801b0cbdb24e01ce7c771dd786d228e07b5fe14de4da04c2e5f2002e8199d0db8b5e03fc9a781610dec4a4763f3823d1757f99d466458b4c110d28272b07591002b57464f55fd8a39ae7dcd998554e281225c7b3ef4c8d1b5f0ae5e8f245491a5efaff56e7d43543a304285b312f42a0f11c56292efa917507f6d5f5467d69af43885ee76cc368c60a41922eaa4e02398c42d9ae2bc0ff6c395bff9eba41e1f87c5b3014a6cbebb22073203a3aea1353cd6279c5de60f64d3734838adf38f8577f012736b5704c802918e5fe761c303d9809d5892db1b390f3c02c92f9ad77d4fa81cb901b43162eb94badbeca78cc9d621696ebde1edb401b37e98ac4ee5e6d4f86710010538c6893a8812f8351a5aa74e9b61f04272a93c049f4d928cd556db676454d5829951c76e33e4f9bd1e2878bbb2c240739848649e98391af97f55cae85a927beb122e6baac94d1236b3efcc287feabc7565bf0a9593fec6f8b7edc60e3e6f63b99e92394ff8fb624d5e3ad9c41819b9075449c9f000320e2fb5916316ca4407ed94c66a223ed06b2ffddeea8052fd7a7e2166ea5bb1b5d63a0cb4a979b572b50339cb2df1b9ff1f3a7a109f1c62686182ef9f6692bc383f287243a8c1eb1535c88050982b1508548c69daecedbcac9d389eb6f3e7a3177aa46231b3668f1c513d8f013bec991a2bdef89a37d5786ad7159105e35b357704b416116123ab331ddeac4d498049743dc96cd09dc51aeb733f35abbd40ee6b3d3dace1a54b9a5e76b5a8c78fa360006bf532aeac598a2639561949fc00a6a7084fbec02fdb7abe41cb61ae026ebbaecf730dc5c7728bdef37b296d6a1d3195508b3e48f6ab5ded952c67867beb66be3981f539345fbd5ef6ce97a8d55b7749abdf10e966581057eb746129eb9d648d690b16024548ebfe26a2de47468ee5a4c2706ae6d86c3fa3ac95d77189d75c809486977e80d1ab98ac10be22e3e5d4ba0439ef32595e8f2790262d90a54231a94adc7b92077284520e49f031082a49ffe2991af4f0774791bdfd1200f4466ee34e5cac2c4b6a255e67aa34bd5a4a83e848a5104fc061680d80bf0a77babd7b493a769449f34a2f5e78b0ec87cef80f431ddfe7b4e50bea8e64a9bcfa2044a256f216b31b111f2646c6052076fa3fb92c7524325d87419f06c2dbff87da4851525ae4ffde8f183871e4185cd61d719e07f8f3ccf404ca714eead4ede4af05b21625ed1fb700862b13d94e8d0e46c8305eff5950e45537c8e7d55e07a960c5a68664b92fae91833285ba677f7b6ce201947af212f14e6cd123355e1c7dc0b0342c1be031b4498ffd471791f2eece6719af1402202c9c93074e02048f093bd27d19cf544884a5b16b4e9927ce21209c9c1b5a2fc9925825828f464842f14e499c1720bd51d2c0d9f880cb30aa8447f5164b5ab882f8228c2f6caa9315808540ba40d112b26073c0e8d4a8e15cc6c171a7aa7f5bc5a29102a60d01fe131ed1f07e2c1a43af75f84cea6dae2febf3896f5bc3cc06bbdcbcf83ab2185144e6294daf55a5cb243e1319fbcaea917f7aa5270a7f5d15e7a782b859ace34df29261916ac997a19b295b43948c824664109675406de8f61c4174df7ee084fa95ce7fdf81ab1c554d4534fb43939f98ff9467bb71fe1149412e82fedcdef9fa51fbrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrooterlang-23.3.4.19-150300.3.14.1.src.rpmerlang-srcerlang-src(ppc-64)    erlangrpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)23.3.4.193.0.4-14.6.0-14.0-15.2-14.14.3e@e;e;cr-^{G^\@^M#@^G@^=Q@^8 @^*@^!]f@]+]e@]M@])]@]]b@]b@]e@]>]@] ]/@\P\@\@\@\r@\N\@\+@\k\\\Yz\J@\*\@\@[[[%@[<@[[t[r@Z@Zs@Z@Z@YYo@Yo@Y@YyYYlY YX-X-X•@X@XVz@W@W@WoWgWc@WA@WA@W(V@VVV$@VrV2 @V }@Uݪ@ŬU(Ub@UU>U@Ug@UG_@U#T@T*@T_W@T_W@sflees@suse.desflees@suse.desflees@suse.demcepl@suse.comg.santomaggio@gmail.comtchvatal@suse.comg.santomaggio@gmail.commatwey.kornilov@gmail.comgsantomaggio@suse.degsantomaggio@suse.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comdimstar@opensuse.orggsantomaggio@suse.degsantomaggio@suse.degsantomaggio@gmail.comgsantomaggio@suse.degsantomaggio@suse.dematwey.kornilov@gmail.commatwey.kornilov@gmail.comopensuse-packaging@opensuse.orgmliska@suse.czopensuse-packaging@opensuse.orgmatwey.kornilov@gmail.comg.santomaggio@gmail.commatwey.kornilov@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.commatwey.kornilov@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.comg.santomaggio@gmail.commatwey.kornilov@gmail.comg.santomaggio@gmail.commatwey.kornilov@gmail.comg.santomaggio@gmail.commchandras@suse.deg.santomaggio@gmail.comdmueller@suse.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comrbrown@suse.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commeissner@suse.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comkruber@zib.dematwey.kornilov@gmail.commatwey.kornilov@gmail.comjengelh@inai.dematwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comkruber@zib.dematwey.kornilov@gmail.commatwey.kornilov@gmail.commatwey.kornilov@gmail.comro@suse.dematwey.kornilov@gmail.commatwey.kornilov@gmail.comkruber@zib.dekruber@zib.deseife+obs@b1-systems.comkruber@zib.dekruber@zib.dekruber@zib.dedmueller@suse.commatwey.kornilov@gmail.comdmueller@suse.comkruber@zib.dekruber@zib.dematwey.kornilov@gmail.commatwey.kornilov@gmail.comledest@gmail.com- negotiate "strict KEX" OpenSSH feature, when negotiated between peers apply strict KEX(bsc#1218192, CVE-2023-48795) * fix-CVE-2023-48795.patch- Update to 23.3.4.19 to completely fix (CVE-2022-37026, bsc#1205318, jira#PED-6209) * This Removes SSL support but adds TLS 1.3 * Other minor fixes and features especially in the ssh area. * Remove the following patches included upstream * fix-upstream-CVE-2022-37026.patch * feature-upstream-ocsp.patch * feature-upstream-ocsp-2.patch * feature-upstream-ocsp-3.patch * Remove the following patches not in use * feature-upstream-testsuite-enhancement.patch * feature-upstream-testsuite-enhancement-2.patch- Fix a regression in bsc#1205318 CVE-2022-37026-client-auth-bypass.patch (bsc#1207113) * Removed * CVE-2022-37026-client-auth-bypass.patch * Added * feature-upstream-ocsp.patch * feature-upstream-ocsp-2.patch * feature-upstream-ocsp-3.patch * fix-upstream-CVE-2022-37026.patch - Make testsuite run for just ssl but leave it commented out for production * feature-upstream-testsuite-enhancement.patch * feature-upstream-testsuite-enhancement-2.patch- Add CVE-2022-37026-client-auth-bypass.patch to fix Client Authorization Bypass (CVE-2022-37026, bsc#1205318). Patches gh#erlang/otp@cd5024867e7b and gh#erlang/otp@6a1baa36e4e6).- Changes for 22.3: * compiler: A 'receive' with an 'after 0' clause would prevent the optimization that can avoid scanning the entire receive queue when matching on a newly created reference. * compiler: HiPE can again handle modules with catch and try constructs. * compiler: Fixed a bug in bit-syntax optimization that could crash the compiler. * crypto: Fixed potential memory leaks involving calls to the crypto ng_api. * common_test: Document incl_apps cover option * common_test: The ct_property_test has now a report function for results of stateful testing. * common_test: Don't hide error reasons from user * stdlib: Fix type specification for uri_string:normalize/2 that may also return error(). * stdlib: Improve error handling in uri_string:normalize/2. This change fixes a crash when the input URI has faulty percent- encoding. * stdlib: Fix minor bugs in the Erlang pretty printer (erl_pp). * stdlib: Fix the Erlang parser regarding consecutive unary operators. * stdlib: Let calendar:rfc3339_to_system_time() crash when the time offset is missing. * stdlib: Implement uri_string:resolve/{2,3} that can be used to resolve a URI reference against a base URI. * stdlib: In gen_statem it is now possible to change the callback module for a running server. See gen_statem's documentation for change_callback_module, push_callback_module, and pop_callback_module. * ssl: Correct handling of TLS record limit in TLS-1.3. The max value differs from previous versions. Also the payload data max record check was broken, that is record overflow problems could occur if user sent large amounts of data. * ssl: Correct close handling for DTLS * ssl: Fix ssl:getstat/1-2 to also work for DTLS sockets * ssl: Correct internal handling och socket active mode to avoid reviving TCP data aimed for a downgraded TLS socket. * ssl: When using the host name as fallback for SNI (server name indication) strip a possible trailing dot that is allowed in a host name but not in the SNI. Also if the server receives a SNI with a trailing dot send an UNRECOGNIZED_NAME alert. * ssl: Immediately remove session entries if handshake is abruptly closed at transport level. * ssl: Implementation of the key and initialization vector update feature, and general hardening of TLS 1.3. There are cryptographic limits on the amount of plaintext which can be safely encrypted under a given set of keys. This change enforces those limits by triggering automatic key updates on TLS 1.3 connections. * ssl: Add support for TLS 1.3 Session Tickets (stateful and stateless). This allows session resumption using keying material from a previous successful handshake. * ssl: Add support for key exchange with Edward curves and PSS- RSA padding in signature verification. * megaco: The documented function megaco:get_sdp_record_from_PropertGroup/2 was a wrapper for megaco_sdp:get_sdp_record_from_PropertGroup/2 but did not actually exist. This has now been fixed. * megaco: Test suite completely reworked. Add (timestamp) utility functions for debugging and testing. * erl_interface: Fix link error "multiple definition of `ei_default_socket_callbacks'" for gcc version 10 or when built with gcc option -fno-common. Error exists since OTP-21.3. * asn1: Fix 'DEFAULT' with 'OCTET STRING' and 'SEQUENCE OF CHOICE' with extensions. * erts: gen_udp:recv(S, N, 0) corrupted the internal state for the socket so after receive with {active, once} it always returned {error, timeout}, and wasted the received UDP packets. This bug has now been fixed. Reported and pinpointed by Alexander Petrovsky. * erts: The atom esock_atom_user and esock_atom_kernel was never actually created. This has now been corrected. * erts: Fixed bug in socket module that could potentially lead to scheduler deadlocks. * erts: Fix bug causing VM crash if down or stop callback of a NIF resource is called after the NIF module has been purged. The fix will postpone unloading until all such resource objects have been garbage collected. * erts: Fixed bug in ets:update_counter/4, when called with an invalid UpdateOp and a Key that does not exist, causing ets:info(T,size) to return incorrect values. Bug exists since OTP-19.0.2. * erts: Fix potential heap corrupting bugs when a process calls a BIF that blocks other normal schedulers and then writes to its own heap without the main process lock. A NIF running on a dirty scheduler trying to interact with such a process could corrupt its heap. The fixed BIFs were related to code loading and tracing. * erts: Fixed bug in erlang:list_to_ref/1 when called with a reference created by a remote note. Function list_to_ref/1 is intended for debugging and not to be used in application programs. Bug exist since OTP 20.0. * erts: The prim_net nif (net/kernel) made use of an undefined atom, notsup. This has now been corrected. * erts: Corrected the valid range of the erl command line argument +SDio from 0..1024 to 1..1024. +SDio 0 was erroneously allowed which just caused the VM to crash on the first dirty I/O job scheduled. * erts: Fix a crash when attempting to log faults when loading files during early boot. * erts: For socket, not all send and receive flags are supported on all platforms. In order to (at least) simplify testing, the socket:supports/0,1,2,3 functions has been extended with send_flags and recv_flags items, which indicates what the current platform can manage. * erts: Add a "full featured" version of getifaddrs in the net module. * erts: The options busy_limits_port and busy_limits_msgq have been added to the BIF erlang:open_port/2. The busy_limits_port option can be used for controlling the busy state of a port executing the spawn_driver or the fd_driver. The busy_limits_msgq option can be used for controlling the busy state of the port message queue. * erts: A socket "registry" has been added making it possible to list current open sockets. * erts: The counters managed by the socket nif has been extended. Their "size" has been increased from 32 bit to 64. Two max package size (for read and write) has been added. And four accept counters has been added. * erts: Add gcc option -fno-common to detect accidental name clashes of global variables. * erts: New dynamic lock checker that verifies locking orders and detects potential deadlock bugs in drivers and NIFs. Enabled together with the old static lock checker (for ERTS internal locks) in emulator started with -emu_type debug or built with configuration option --enable-lock-checking. * snmp: A simple supervision of the snmp manager net-if process has been added. Also, a way to forcibly restart the net-if process has been added. This could be useful if the net-if process hangs for some reason. * snmp: Misc documentation corrections * mnesia: Fixed a timing issue in uninstall fallback functionality. * eunit: Backport of PR-2316: Strip control codes from eunit_surefire output to avoid generation of invalid xml * ssh: Unicode problems for ssh_sftp:write fixed. * ssh: Changes to the internal api of the experimental ssh_dbg tool. * ssh: The new functions ssh:set_sock_opts/2 and ssh:get_sock_opts/2 sets and reads option values for the underlying TCP stream. * hipe: HiPE can again handle modules with catch and try constructs. * hipe: When the return value for try/catch was ignored, the native code compiler could crash. * public_key: Add support for key exchange with Edward curves and PSS-RSA padding in signature verification. * diameter: Add the 'first' tuple to type diameter:peer_filter/0. The filter was added in OTP-17.5.6.8 and OTP-18.3, but neither release updated the type specification. * tools: An Emacs warning due to lacking type in defcustom declaration has been fixed. * tools: Improve emacs indentation. * tools: The cover tool could generate instrumented code for a module that would cause warnings to be issued. * tools: Fixed generated fprof analysis format to also handle data in maps. * sasl: A socket "registry" has been added making it possible to list current open sockets. * kernel: The DNS resolver `inet_res` has been fixed to return the last intermediate error when subsequent requests times out. * kernel: The prim_net nif (net/kernel) made use of an undefined atom, notsup. This has now been corrected. * kernel: Fix a crash when attempting to log faults when loading files during early boot. * kernel: Fix crash in logger when logging to a remote node during boot. * kernel: Improved net_kernel debug functionality. - Changes for 22.2.8: * diameter: The possibility of choosing a handler process for an incoming Diameter request with a configured MFA was documented in OTP 20.0, but counters (with {traffic_counters, true}) were not incremented when this process was on a remote node. Counters are now incremented on the node that configures the transport in question. Introduced in OTP 21.3. * diameter: Transport options differing from those passed to diameter:add_transport/2 were used in several situations: when starting a transport process after connect_timer expiry after an initial connection attempt has failed, when starting a transport process after a connection has been accepted, when sending events, when returning options in diameter:service_info/2, and possibly more. In particular, the following configuration options to diameter:add_transport/2 were dropped: avp_dictionaries, incoming_maxlen, spawn_opt, strict_mbit. Moreover, any service options mistakenly passed to diameter:add_transport/2 were interpreted as such, instead of being ignored as the documentation states, with the consequence that outgoing and incoming requests saw different values of some options, some were always taken from transport options, and others from service options. diameter:add_transport/2 must be called in new code for the fix to have effect. Introduced in OTP 20.1.- Remove conditions and support for openSUSE/SLE < 15 - Remove not really needed service file _service - Convert the dependencies to pkgconfig style ones- Changes for 22.2.7: * compiler: Fixed a bug that could cause the compiler to reject valid code that used the is_map_key/2 BIF. * compiler: Fixed a bug that could cause the compiler to reject valid code that matched the same map key several times. * compiler: The compiler could crash when compiling a convoluted receive statement. * compiler: The compiler could crash when a fun was created but never used. The compiler could crash when compiling the expression true = 0 / X. - jsc#SLE-10913- Changes for 22.2.6: * erts: A process could get into an inconsistent state where it was runnable, but never scheduled for execution. This could occur when a mix of normal and low priority processes where scheduled on the same type of dirty scheduler simultaneously.- Changes for 22.2.5: * erts: A process could end up in a state where it got endlessly rescheduled without making any progress. This occurred when a system task, such as check of process code (part of a code purge), was scheduled on a high priority process trying to execute on a dirty scheduler. * erts: Improved signal handling for processes executing dirty. For example, avoid busy wait in dirty signal handler process when process is doing garbage collection on dirty scheduler. * stdlib: A directory traversal vulnerability has been eliminated in erl_tar. erl_tar will now refuse to extract symlinks that points outside the targeted extraction directory and will return {error,{Path,unsafe_symlink}}. (Thanks to Eric Meadows-Jönsson for the bug report and for suggesting a fix.)- Changes for 22.2.4: * ssl: Enhance error handling, all ALERTS shall be handled gracefully and not cause a crash. * ssl: Enhance alert logging, in some places the role indication of the alert origin was missing. So the log would say undefined instead of client or server. * ssl: Two different optimizations did not work together and resulted in the possible breakage of connections using stream ciphers (that is RC4). Reworked the implementation to avoid this.- Changes for 22.2.3: * ssl: Fix the handling of GREASE values sent by web browsers when establishing TLS 1.3 connections. This change improves handling of GREASE values in various protocol elements sent in a TLS 1.3 ClientHello. * ssl: Correct DTLS listen emulation, could cause problems with opening a new DTLS listen socket for a port previously used by a now closed DTLS listen socket. * compiler: Fixed a bug in the compiler that could cause it to reject valid code.- Changes for 22.2.2: * erts: Taking a scheduler offline could cause timers set while executing on that scheduler to be delayed until the scheduler was put online again. This bug was introduced in ERTS version 10.0 (OTP 21.0). * erts: The ets:update_counter/4 core dumped when given an ordered_set with write_concurrency enabled and an invalid position. This bug has been fixed. * erts: A process calling erlang:system_flag(multi_scheduling, block) could end up blocked waiting for the operation to complete indefinitely. * erts: Duplicate entries for [socket:]getopt and [socket:]setopt in man page. * stdlib: The ets:update_counter/4 core dumped when given an ordered_set with write_concurrency enabled and an invalid position. This bug has been fixed. * crypto: Constant time comparisons added. * ssh: Fixed that ssh_connection:send could allocate a large amount of memory if given an iolist() as input data. * ssh: Safe atom conversions. * ssh: Constant time comparisons added. - Changes for 22.2.1: * erts: Corrected an issue with the new socket api which could cause a core dump. A race during socket close could cause a core dump (an invalid nif environment free). * erts: Corrected an issue with the new socket api which could cause a core dump. When multiple accept processes waiting for a connect a connect could cause a core dump. * snmp: Its now possible to remove selected varbinds (from the final message) when sending a notification. This is done by setting the 'value' (in the varbind(s) of the varbinds list) to '?NOTIFICATION_IGNORE_VB_VALUE'. * snmp: Its now possible to specify that an oid shall be "truncated" (trailing ".0" to be removed) when sending an notification. * ssl: Add missing alert handling clause for TLS record handling. Could sometimes cause confusing error behaviors of TLS connections. * ssl: Fix handling of ssl:recv that happens during a renegotiation. Using the passive receive function ssl:recv/[2,3] during a renegotiation would fail the connection with unexpected msg.- BuildRequire pkgconfig(libsystemd) instead of systemd-devel: Allow OBS to shortcut through the -mini flavors.- Changes for 22.2 * http://erlang.org/download/OTP-22.2.README * Highlights: * erts: The Kernel application's User's Guide now contains a Logger Cookbook with common usage patterns. * erts: Numerous improvements in the new socket and net modules * Standard libraries: common_test: ct_property_test logging is improved * Standard libraries: ssl: Correct handling of unordered chains so that it works as expected * Tools: Emacs erlang-mode function that lets the user open the documentation for an Erlang/OTP function in an Emacs buffer has been improved. Users will be asked if they want the man pages downloaded if they are not present in the system.- Changes for 22.1.8 * http://erlang.org/download/OTP-22.1.8.README * erts: Large amounts of quickly executed dirty work could cause heavy contention on an internal spin lock. The spin lock was replaced by a mutex which behaves much better under these conditions.- Changes for 22.1.7 * http://erlang.org/download/OTP-22.1.7.README * compiler: Fixed a performance bug that caused repeated matches of large records to take a very long time to compile. * erts: A literal area could prematurely be released before all uses of it had been removed. This occurred either when a terminating process had a complex exit reason referring to a literal that concurrently was removed, or when a terminating process continued executing a dirty NIF accessing a literal (via the heap) that concurrently was removed. * erts: Fix bug causing VM crash due to memory corruption of distribution entry. Probability of crash increases if Erlang distribution is frequently disconnected and reestablished towards same node names. Bug exists since OTP-21.0. * erts: Fixed bug causing crash of VM built with configuration - -enable--sharing-preserving. Provoked when a sent message contains both a bit string and the heap binary (< 65 bytes) which the bit string was matched from. Bug exists since OTP-19.0 but has seen to be easier to provoke since OTP-22.1. - Changes for 22.1.6 * http://erlang.org/download/OTP-22.1.6.README * compiler, erts: The compiler could do an unsafe optimization of receives, which would cause a receive to only scan part of the message queue. * crypto: The AEAD tag was not previously checked on decrypt with chacha20_poly1305 * erts:Fix bug where the receive marker used by the runtime to do the receive queue optimization could be incorrectly set. The symptom of this would be that a message that should match in a receive never matches. * snmp: Agent discovery cleanup. If there is no receiver of INFORM then #state.reqs in snmpa_net_if keeps on growing for DISCOVERY.- Changes for 22.1.5 * http://erlang.org/download/OTP-22.1.5.README * snmp: Application(s): snmp Related Id(s): ERIERL-427 The agent discovery process has been made to work with snmptrapd..- Changes for 22.1.4 * http://erlang.org/download/OTP-22.1.4.README * compiler: Fixed a bug where the compiler could generate incorrect code for a 'receive' statement inside a 'try'. * crypto: FIxed a bug if the erlang emulator was linked with a very old cryptolib version (1.0.1 or earlier). The bug now fixed could have triggered a core dump if an unknown cipher name was used in crypto functions. * erts: Erlang/OTP can now be built on macOS Catalina (10.15).- Changes for 22.1.3: * inets: Add HTTP server error logging vi logger - Changes for 22.1.2: * erts: Added the environment variable ERLC_SERVER_ID, which allows multiple compile servers to run separately under the same user. - Changes for 22.1.1: * erts: A terminating process sending distributed 'EXIT' or 'DOWN' signals while terminating could end up in a state where no progress at all was made. This was triggered by a distribution channel that the terminating process was sending on got busy. This bug has existed since ERTS version 10.4 (OTP 22.0). * erts: When communicating with a simultaneously exiting port via the erlang:port_*() BIFs one could sometimes get stray {Ref, What} messages. Where Ref was a reference and What usually were the atom badarg. * snmp: Made it possible to add 'extra socket options' to the (gen_udp) socket open call (for both manager and agent). A new option has been added, extra_sock_opts, which makes it possible for the user to add a list of extra socket options that will be appended to the other socket options for the open call. See the snmp application config man page (erl -man 6 snmp) or the "Configuring the application" chapter of the Users Guide for more info. * compiler: Fixed a bug in the bit-syntax optimization pass that could crash the compiler.- Changes for 22.1: * kernel: The type specification for gen_sctp:connect/4,5 has been corrected. * kernel: Extra -mode flags given to erl are ignored with a warning. * kernel: Fix type spec for seq_trace:set_token/2. * kernel: logger:compare_levels/2 would fail with a badarg exception if given the values all or none as any of the parameters. This is now corrected. * kernel: Fix bug where the log file in logger_std_h would not be closed when the inode of the file changed. This would in turn cause a file descriptor leak when tools like logrotate are used. * kernel: Fix a race condition in the debugging function net_kernel:nodes_info/0. * kernel: Fix race condition when closing a file opened in compressed or delayed_write mode. * kernel: The possibility to send ancillary data, in particular the TOS field, has been added to gen_udp:send/4,5. * kernel: If the log file was given with relative path, the standard logger handler (logger_std_h) would store the file name with relative path. If the current directory of the node was later changed, a new file would be created relative the new current directory, potentially failing with an enoent if the new directory did not exist. This is now corrected and logger_std_h always stores the log file name as an absolute path, calculated from the current directory at the time of the handler startup. * kernel: Support local sockets with inet:i/0. * observer: Fix bug after a user followed link on a pid from an expanded term window. * observer: Improved dark mode colors on Linux. * mnesia: mnesia:add_table_copy/3 could cause a deadlock if called when a new node was starting. * mnesia: Transactions with sticky locks could with async_asym transactions be committed in the wrong order, since asym transaction are spawned on the remote nodes. To fix this bug the communication protocol between mnesia nodes had to be updated, thus mnesia will no longer be able to connect to nodes earlier than mnesia-4.14 , OTP-19.0. *** POTENTIAL INCOMPATIBILITY *** * stdlib: re:run() now yields when validating utf8 in a large subject. * stdlib: Upgraded the ERTS internal PCRE library from version 8.42 to version 8.43. See http://pcre.org/original/changelog.txt for information about changes made to PCRE. This library implements major parts of the re regular expressions module. * stdlib: The bug with ID ERL-717 has been fixed. The functions io:columns() and io:rows() only worked correctly inside interactive erlang shells before this fix. These functions returned {error,enotsup} before this fix even if stdout and stdin were connected to a terminal when they were invoked from an escript or a program started with e.g., erl -noshell. * stdlib: Fixed handling of ".." and "@" in wildcards. ".." would only work when preceded by a literal pattern such as in "a/..", not when preceded by wildcard characters such as in "*/..". The combination "@/.." was also broken, and in addition "@" in a pattern could degrade performance of the wildcard matching. * stdlib: Make sure ets:fun2ms() can handle ++/2 in the head of functions when called from the shell. * stdlib: Debugging of time-outs in gen_statem has been improved. Starting a time-out is now logged in sys:log and sys:trace. Running time-outs are visible in server crash logs, and with sys:get_status. Due to this system events {start_timer, Action, State} and {insert_timout, Event, State} have been added, which may surprise tools that rely on the format of these events. New features: The EventContent of a running time-out can be updated with {TimeoutType, update, NewEventContent}. Running time-outs can be cancelled with {TimeoutType, cancel} which is more readable than using Time = infinity. *** POTENTIAL INCOMPATIBILITY *** * stdlib: re:run() now avoids validating utf8 in the subject more than once in the same call. This validation could previously be performed multiple times when the global option was passed. * stdlib: ETS ordered_set tables with write_concurrency enabled has got a performance issue fixed. There were no limits for the values of internal statistics counters before this fix. This could result in that the data structure sometimes reacted slowly to a change in how many parallel processes were using it. * stdlib: The ordsets:union/1 is now faster when passed a long list of ordsets. * stdlib: unicode:characters_to_binary() could return very small binaries as reference counted off heap binaries. This could cause an unnecessary large memory usage and an unnecessary load on the binary allocator. Small binaries are now always returned as heap binaries. * stdlib: Display a more meaningful error message when a bad I/O server is used in a script written in Erlang (escript). * stdlib: New feature ets:info(_, binary) to get information about all reference counted binaries kept by a table. This is the same kind of debug information that process_info(_, binary) returns for a process. * stdlib: Corrected ETS documentation about the behavior of compiled match specifications when serialized through external format. * tools: cover would fail to start if two processes tried to start it at the exact same time. * common_test: If a ct hook is installed in the suite/0 function in a test suite, then the hook's terminate/1 function would be called several times without it's init/2 function being called first. This is now corrected. * common_test: If init_per_testcase fails, the test itself is skipped. According to the documentation, it should be possible to change the result to failed in a hook function. The only available hook function in this case is post_init_per_testcase, but changing the return value there did not affect the test case result. This is now corrected. * common_test: Add ct_netconfc support for NETCONF 1.1 (RFC 6241). The 1.1 base capability can be sent in hello, and RFC 6242 chunk framing is applied when both client and server advertise 1.1 support. * common_test: Correct lib_dir paths in common_tests opaque data structure that is passed to ct_release_test callback modules in functions upgrade_init/2, upgrade_upgraded/2 and upgrade_downgraded/2. The incorrect paths may cause confusion when debugging although it will not cause any incorrect behavior on the part of common_test as it is currently not used. * erts: If you set {linger,{true,0}} on a gen_tcp listen socket, accept a connection on that socket, and then close the accepted socket, now the linger zero setting is transferred to the accepted socket. Before this correction that information was lost and the close behaviour on the accepted socket incorrect. * erts: Sending ancillary data implemented in OTP-15747 accidentally left behind test code that caused all UDP sends to fail on Windows. This has now been fixed. * erts: In the socket nif, used invalid flags when if-def'ing for supported TCP flags: TCP_MAXSEG and TCP_NODELAY (the support function). * erts: Fixed memory leaks in experimental socket module. * erts: re:run() now yields when validating utf8 in a large subject. * erts: Fixed bug in seq_trace:set_token(label,Term) which could cause VM crash if Term was heap allocated (not an atom, small integer, local pid or port). Bug exists since OTP 21.0 when terms other than small integers were first allowed as labels. * erts: Extra -mode flags given to erl are ignored with a warning. * erts: Don't loop indefinitely when --enable-pgo is given to configure, but compiler does not support pgo. * erts: Fix seq_trace:print/2 not to raise badarg exception if label is not a small integer. Bug exists since OTP 21.0. * erts: Fixed hipe_flush_icache_range for non-Linux OS on ARM. * erts: The fix in OTP-15871 was too conservative and disabled the offending load-time optimization in some cases where it was safe. * erts: Upgraded the ERTS internal PCRE library from version 8.42 to version 8.43. See http://pcre.org/original/changelog.txt for information about changes made to PCRE. This library implements major parts of the re regular expressions module. * erts: Fix race condition when closing a socket while using {active,N} on Windows. * erts: Allow more than one -config command line option to erl on Windows to conform with other OS. * erts: Fix so that ERL_FLAGS environment variable does not interfere with command line arguments. Before this fix you could write: ERL_FLAGS="10" erl +S and erlang would start as if +S had been given the argument 10. * erts: The bug with ID ERL-717 has been fixed. The functions io:columns() and io:rows() only worked correctly inside interactive erlang shells before this fix. These functions returned {error,enotsup} before this fix even if stdout and stdin were connected to a terminal when they were invoked from an escript or a program started with e.g., erl -noshell. * erts: Do not use named label in ethread.c inline assemble. This allows erts to be compiled using gcc 9.1.0 with LTO enabled. * erts: erlang:fun_to_list/1 will now escape the module and function name when necessary. * erts: process_info(P,binary) would neglect to look through heap fragments, potentially missing a few binaries associated with the process. * erts: HiPE is now automatically disabled on systems with non- glibc implementation (for instance musl). This is because musl does not provide the API's for guaranteeing that signals are delivered on the correct native stack. * erts: Fixed bug triggered if a process is killed during call to persistent_term:put or persistent_term:erase. * erts: Add units to all memory slogans in the crash dump documentation. * erts: Fix a bug in binary_to_term that would crash the emulator if a term larger than 16GB was to be decoded. * erts: Fixed bug related to an exiting process sending EXIT and DOWN signals to remote linked/monitored processes. Bugs exists since OTP 22.0. * erts: erlc can now automatically use a compile server to avoid starting an Erlang system for each file to be compiled in a multi-file project. See the documentation for how to enable it. * erts: The possibility to send ancillary data, in particular the TOS field, has been added to gen_udp:send/4,5. * erts: The net module has been split into 'net' (kernel) and prim_net (preloaded). * erts: Socket counters now works as expected and can also be extracted with the (new) info function. * erts: re:run() now avoids validating utf8 in the subject more than once in the same call. This validation could previously be performed multiple times when the global option was passed. * erts: The un-documented function erlang:dist_get_stat/1 now returns the real value of what the distribution queue contains instead of a boolean. * erts: ETS ordered_set tables with write_concurrency enabled has got a performance issue fixed. There were no limits for the values of internal statistics counters before this fix. This could result in that the data structure sometimes reacted slowly to a change in how many parallel processes were using it. * erts: Optimize the reception of large distribution messages. * erts: Binary matching and functions like split_binary/2 will now create heap binaries when the results are small enough, reducing the chances of small sub-binaries keeping large binaries alive. * erts: Fixed rare emulator crash in instrument:allocations/0-1. * erts: Ports could pass very small binaries as reference counted off heap binaries to processes. This could cause an unnecessary large memory usage and an unnecessary load on the binary allocator. Small binaries are now always passed as heap binaries to processes. * erts: unicode:characters_to_binary() could return very small binaries as reference counted off heap binaries. This could cause an unnecessary large memory usage and an unnecessary load on the binary allocator. Small binaries are now always returned as heap binaries. * erts: Improved erl_nif documentation regarding on_load and Erlang stub/fallback functions. * erts: New feature ets:info(_, binary) to get information about all reference counted binaries kept by a table. This is the same kind of debug information that process_info(_, binary) returns for a process. * erl_docgen: Update the documentation build support to handle FOP 2.1 . * ftp: A possibly infinite loop when receiving messages divided in parts is removed. * dialyzer: Allow native compilation when using Dialyzer from Erlang. The options native (defaults to false) and native_cache have been added. * eunit: Handle get_until request with explicit encoding in the implementation of the I/O protocol. * snmp: Fix various minor issues related to Dialyzer. Mostly these are dialyzer warnings, but there was also some minor bugs detected by Dialyzer. * snmp: Fixed a dets usage problem detected by dialyzer. * snmp: The function snmp:print_version_info() prints various version info. For each module a number of items are printed, such as app vsn and md5 digest. And an attempt was also made to print "compile time". This used to be available in the module_info for each module, but has now been removed. * snmp: The use of the deprecated random module has been replaced the with rand module. * snmp: Removed use of the deprecated function erlang:get_stacktrace(). Instead make use of the 'catch Class:Error:Stacktrace' feature. * syntax_tools: Add missing calls to erl_syntax:unwrap/1. The nodes concerned represent names and values of maps and map types. * wx: Fix a driver bug that could crashes when allocating memory. * erl_interface: Fix bugs in ei_print_term for binaries and bit strings causing incorrect output. * erl_interface: Fixed bug in ei_decode_fun for very old fun encoding format. Bug exist since OTP 22.0. * erl_interface: ei_print_term() now supports printing of maps and funs. * xmerl: xmerl_sax_parser crashed during charset detection when the xml declarations attribute values was missing the closing quotation (' or "). * ssl: Handling of zero size fragments in TLS could cause an infinite loop. This has now been corrected. * ssl: DTLS record check needs to consider that a resent hello message can have a different version than the negotiated. * ssl: Basic support for TLS 1.3 Client for experimental use. For more information see the Standards Compliance chapter of the User's Guide. * ssl: Correct solution for retaining tcp flow control OTP-15802 (ERL-934) as to not break ssl:recv as reported in (ERL-938) * ssl: Enhance dialyzer specs to reflect implementation better and avoid dialyzer warnings for the user that wants to use TLS with unix domain sockets. * ssl: Add support for ECDSA signature algorithms in TLS 1.3. * ssl: Correct error handling of TLS downgrade, possible return values form ssl:close/2 when downgrading is {ok, Port} or {error, Reason}, it could happen that only ok was returned instead of {error, closed} when downgrade failed due to that the peer closed the TCP connection. * os_mon: Fix disk_sup to ignore squashfs on Linux when determining if a mounted filesystem is full or not. * os_mon: Fix bug where cpu_sup:util() always returned 100% on systems not using gnu libc, for example Alpine OS. * ssh: Fixed wrong type definition for the daemon option subsystems. * ssh: Fixed a possible SSH logging crash if there was a problem in an early stage of session setup. * ssh: The documentation for the modules ssh_connection, ssh_sftp and ssh_sftpd are now generated from the -spec:s. * ssh: Internal cleanup including removal of the internal file ssh_userauth.hrl. * ssh: Removed unused definitions in ssh.hrl. * ssh: Removed unused fields in the internal #connection{} record. * ssh: To get information of a connection_ref() from for example ssh:connect/3, there was previously one function available namely ssh:connection_info/2. This ticket adds ssh:connection_info/1 which returns all information. For daemons (servers) started with for example ssh:daemon/2 the function ssh:daemon_info/1 returning all information was available. This ticket adds ssh:daemon_info/2 which returns only the information specified in the second argument. The info of connections and of daemons now also includes the item 'options'. Only those options that does not have their default values are returned. For a connection also the items 'algorithms' and 'channels' are added. * inets: httpd - Accept singel LF as line terminator * inets: mod_esi will now always propagate the actual HTTP status code that it answered with, to later mod-modules, and not in some cases hardcode 200. * compiler: Code such as the following would crash the compiler in OTP 22: [some_atom = fun some_function/1] * compiler: Compilation could get really slow (in the order of minutes instead of seconds) when compiling huge functions. (Thanks to Kostis Sagonas for reporting this bug.) * compiler: Fixed a bug in the validator that could reject valid code. * compiler: In rare circumstances, when two clauses had identical bodies and guard tests that tested a single boolean variable, the guard test for the second clause could be discarded, executing the second clause unconditionally if the first clause was not executed. * compiler: Fixed extremely slow compilation for huge functions doing predominantly pattern matching. * compiler: The compiler could generate unsafe code (that would crash the runtime system) for map pattern matching. The code could be unsafe if the matched key was not present in the map at runtime. * compiler: Correct code using try/after could fail to compile when using the option 'no_type_opt'. * compiler: The compiler could crash when compiling code that called 'length/1' on a binary extracted using the binary syntax. * compiler: Fixed a bug where the compiler could fail with an internal consistency failure error when compiling receive statements. * compiler: Fixed a problem where the compiler would crash when compiling binary matching in a function head. * public_key: Support Password based encryption with AES * public_key: Change dialyzer spec to avoid confusion * runtime_tools: Fix dbg:stop_clear/0 to also clear trace events (send and 'receive'). * megaco: Fix various minor issues related to Dialyzer. Mostly these are dialyzer warnings, but there was also some minor bugs detected by Dialyzer. * crypto: The implementation of crypto_one_time/4 is adjusted to match the type specification. The spec and the black-box behaviour of the function are unchanged. Some details: Both the spec and the implementation were correct seen separately. But with both of them combined simultaneously with crypto_one_time/5 which was called by the implementation of crypto_one_time/4, an (obvious) error was detected by a Dialyzer with more thorough checking than usual. * crypto: When using crypto with FIPS mode enabled, the digests were not correctly handled. * crypto: A memory leak in error handling code in ng_crypto_init_nif is fixed. * crypto: Fixed the broken static build of the crypto nifs * crypto: The Message Authentication Codes (MAC) CMAC, HMAC and Poly1305 are unified into common functions in the New Crypto API. See the manual for CRYPTO. * sasl: The net module has been split into 'net' (kernel) and prim_net (preloaded). * jinterface: Replaced deprecated with in documentation.- Rebased patches: + 0001-erts-Do-not-use-named-no_cpuid-label-in-asm.patch dropped (merged upstream)- Udate -ffat-lto-objects in order to properly build static libraries provided by the package (boo#1142645). - Use %make_build macro.- Add patch 0001-erts-Do-not-use-named-no_cpuid-label-in-asm.patch: fix boo#1142913 - Changes for 22.0.7: * compiler: Fixed a compiler crash introduced in 22.0.6 (OTP-15952). - Changes for 22.0.6: * compiler: Fixed an unsafe optimization when matching tuple_size/1 outside of guards, which could crash the emulator if the argument was not a tuple. * compiler: Fixed a rare bug that could cause the wrong kind of exception to be thrown when a BIF failed in a function that matched bitstrings. * compiler: Fixed a bug where receive statements inside try/catch blocks could return incorrect results. * ssl: Enhance error handling for erroneous alerts from the peer. * hipe: The HiPE compiler would badly miscompile certain try/catch expressions, so it will now refuse to compile modules containing try or catch. As a consequence of this, dialyzer will no longer compile key modules to native code. *** POTENTIAL INCOMPATIBILITY *** * dialyzer: The HiPE compiler would badly miscompile certain try/catch expressions, so it will now refuse to compile modules containing try or catch. As a consequence of this, dialyzer will no longer compile key modules to native code. *** POTENTIAL INCOMPATIBILITY *** - Changes for 22.0.5: * inets: Fix a regression in http client that causes a crash when request URI has no scheme. * ssl: Fix handling of certificate decoding problems in TLS 1.3 similarly as in TLS 1.2. * ssl: Hibernation now works as expected in all cases, was accidently broken by optimization efforts. * ssl: Fix interoperability problems with openssl when the TLS 1.3 server is configured wirh the option signature_algs_cert. * dialyzer: Make sure Dialyzer does not crash if the formatting of results fails. Instead of crashing, an unformatted version of the results is returned. * erts: An invalid value test caused the socket:setopt(Socket, ip, add_membership, ip_mreq()) to fail with badarg. The same for drop_membership. * erts: Fixed bug causing VM crash when doing textual dump of a process containing an unhandled monitor down signal. Textual process dumps can be done with erlang:system_info(procs), trace feature process_dump, Erlang shell break menu and a crashdump. Bug exist since OTP 21.0. * erts: lists:subtract/2 would produce incorrect results for some inputs on 64-bit platforms. * erts: Fixed a bug in the loader that was similar to OTP-15938, yielding incorrect code for some inputs on 64-bit platforms. * erts: Fixed bug causing scheduler threads in rare cases to block spinnning indefinitely. Bug exists since OTP 21.0.- Drop priv/obj directories: boo#1140404- Version 22.0.4: * http://erlang.org/download/OTP-22.0.4.README - Bug Fixes * erts: Fixed a buffer overflow when binary_to_existing_atom/2 and list_to_existing_atom/2 was used with the latin1 encoding. * erts: The runtime system disconnected a connection if it received an exit/2 signal where the recipient was a process on an old incarnation of the current node. That is, the receiving node had the same node name, but another "creation" number. The signal will now just be dropped since the receiving process no longer exists. * kernel: user/user_drv could respond to io requests before they had been processed, which could cause data to be dropped if the emulator was halted soon after a call to io:format/2, such as in an escript. * ssl: Correct handshake handling, might cause strange symptoms such as ASN.1 certificate decoding issues. * ssl: Fix handling of the signature_algorithms_cert extension in the ClientHello handshake message. * ssl:Handle new ClientHello extensions when handshake is paused by the {handshake, hello} ssl option.- Version 22.0: - Potential Incompatibilities: * gen_* behaviours: If logging of the last N messages through sys:log/2,3 is active for the server, this log is included in the terminate report. * reltool: A new element, Opts, can now be included in a rel tuple in the reltool release specific configuration format: {rel, Name, Vsn, RelApps, Opts}. * All external pids/ports/refs created by erlang:list_to_pid and similar functions now compare equal to any other pid/port/ref with same number from that node. * The old legacy erl_interface library is deprecated as of OTP 22, and will be removed in OTP 23. This does not apply to the ei library. * VxWorks is deprecated as of OTP 22 and will be removed in OTP 23. - New Features: * Support for Erlang Distribution protocol to split the payload of large messages into several fragments. * ETS option write_concurrency now also effects and improves scalability of ordered_set tables. * The length/1 BIF used to calculate the length of the list in one go without yielding, even if the list was very long. Now it yields when called with long lists. * A new (still experimental) module socket is introduced. It is implemented as a NIF and the idea is that it shall be as "close as possible" to the OS level socket interface. * Added the NIF function enif_term_type, which helps avoid long sequences of enif_is_xyz by returning the type of the given term. This is especially helpful for NIFs that serialize terms, such as JSON encoders, where it can improve both performance and readability. * The compiler has been rewritten to internally use an intermediate representation based on Static Single Assignment (SSA). The new intermediate representation makes more optimizations possible. * All compiler options that can be given in the source file can now be given in the option list on the command line for erlc. * In OTP 22, HiPE (the native code compiler) is not fully functional. The reasons for this are new BEAM instructions for binary matching that the HiPE native code compiler does not support. If erlc is invoked with the +native option, and if any of the new binary matching instructions are used, the compiler will issue a warning and produce a BEAM file without native code. * Cover now uses the counters module instead of ets for updating counters. The new function cover:local_only/0 allows running Cover in a restricted but faster local-only mode. The increase in speed will vary depending on the type of code being cover-compiled, as an example the compiler test suite runs more than twice as fast with the new Cover. * A simple socket API is provided through the socket module. This is a low level API that does *not* replace gen_[tcp|udp|sctp]. It is intended to *eventually* replace the inet driver. It also provides a basic API that facilitates the implementation of other protocols than TCP, UDP and SCTP. Known issues are; No support for the Windows OS (currently), a small term leakage. This feature will be classed as experimental in OTP 22. * SSL: now uses the new logger API, including log levels and verbose debug logging. * SSL: Basic support for TLS 1.3 Server for experimental use. * crypto: The new hash_info/1 and cipher_info/1 functions returns maps with information about the hash or cipher in the argument. - The application otp_mibs has been removed from OTP.- Update to 21.3.8.1: - Changes for 21.3.8.1: * http://erlang.org/download/OTP-21.3.8.1.README * erts: Fixed a buffer overflow when binary_to_existing_atom/2 and list_to_existing_atom/2 was used with the latin1 encoding. * ssl: Correct solution for retaining tcp flow control OTP-15802 (ERL-934) as to not break ssl:recv as reported in (ERL-938) * tools: cover would fail to start if two processes tried to start it at the exact same time. - Update to 21.3.8: - Changes for 21.3.8: * http://erlang.org/download/OTP-21.3.8.README * common_test: The test result when a hook function fails is in general the same as if the function that the hook is associated with fails. For example, if post_init_per_testcase fails the result is that the test case is skipped, as is the case when init_per_testcase fails.This, however, was earlier not true for timetrap timeouts or other error situations where the process running the hook function was killed. This is now corrected, so the error handling should be the same no matter how the hook function fails. Related Id(s): ERIERL-334 * common_test: In some rare cases, when two common_test nodes used the same log directory, a timing problem could occur which caused common_test to crash because it's log cache file was unexpectedly empty. This is now corrected. Related Id(s): ERIERL-342 * common_test: Two new common_test hook functions are introduced: post_groups/2, which is called after Suite:groups/0 post_all/3, which is called after Suite:all/0 A new term, {testcase,TestCase,RepeatProperties} is now also allowed in the return from all/0. This can be used for repeating a single test case a specific number of times, or until it fails or succeeds once. * eldap, public_key, ssl: Back port of bug fix ERL-893 from OTP-22 and document enhancements that will solve dialyzer warnings for users of the ssl application. This change also affects public_key, eldap (and inet doc). Related Id(s): ERL-893, ERL-929, PR-2215 * erl_interface: erl_interface/ei refused to use node names with an alive name (the part of the node name preceding the @ sign) longer than 63 characters and a host name longer than 64 characters. The total amount of characters allowed in a node name (alivename@hostname) was thus limited to 128 characters. These limits applied both to the own node name as well as node names of other nodes. Ordinary Erlang nodes limit the node name length to 256 characters, which meant that you could not communicate with certain Erlang nodes due to their node name used. erl_interface/ei now allow the total amount of characters in a node name to be up to 256 characters. These characters may be distributed between alive name and host name in whatever way needed. That is, the maximum amount of characters in the alive name may be 254 and the maximum amount of characters in the host name may be 254, but in total the node name must not exceed 256 characters. * erts: Fixed more bugs in process_info(reductions) causing it to sometimes behave non-monotonic. That is, a subsequent call toward the same process could return a lower reduction value. Related Id(s): ERIERL-337, OTP-15709 * ssl: Missing check of size of user_data_buffer made internal socket behave as an active socket instead of active N. This could cause memory problems. * eldap, public_key, ssl: Back port of bug fix ERL-893 from OTP-22 and document enhancements that will solve dialyzer warnings for users of the ssl application. This change also affects public_key, eldap (and inet doc). * stdlib: A bug in gen_statem has been fixed where the internal timeout message could arrive as an info to the callback module during high load due to incorrect use of asynchronous timer cancel.- Update to 21.3.7: - Changes for 21.3.7: * http://erlang.org/download/OTP-21.3.7.README * ssh: When an SSH server receives the very first message on a new TCP connection, and that message is not the expected one, the 64 first bytes of the received message are now dumped in the INFO REPORT that reports the Protocol Error. This facilitates the debugging of who sends the bad message or of detecting a possible port scanning- Update to 21.3.6: - Changes for 21.3.6: * http://erlang.org/download/OTP-21.3.6.README * ssl: With the default BEAST Mitigation strategy for TLS 1.0 an empty TLS fragment could be sent after a one-byte fragment. This glitch has been fixed.- Update to 21.3.5: - Changes for 21.3.5: * http://erlang.org/download/OTP-21.3.5.README * diameter: Fix inadvertently broad monitor that resulted in gen_server cast messages to hidden nodes from module diameter_dist. * erts: Add missing documentation of new external tags NEW_PID, NEW_PORT and NEWER_REFERENCE introduced in OTP 19. These new tags are planned to be "activated" in OTP 23 when distribution capability flag DFLAG_BIG_CREATION becomes mandatory. Older nodes (>= 19) are able to decode these new tags and send them back to the new node. Nodes older than OTP 23 will however never encode their own local pids, ports and references using the new tags. * inets: Fix the internal handling of the option erl_script_timeout in httpd. If explicit erl_script_timeout value was supplied in seconds it was not correctly converted to millisecond units for internal usage. This change fixes the handling of erl_script_timeout in all possible configuration scenarios.- Update to 21.3.4: - Changes for 21.3.4: * http://erlang.org/download/OTP-21.3.4.README * crypto: Fixed build link error on Windows. Unresolved symbol 'bcmp'. * erl_interface: Fix handling of Makefile dependencies so that parallel make works properly. * erts: Fix erlang:open_port/2 with the fd option to correctly cleanup the pollset when the port is closed. Before this fix there would be error printouts sent to logger when the same fd was reused in a new port. * ssh: The callback ssh_channel:init/1 was missing in OTP-21 * ssh: If a client was connected to an server on an already open socket, the callback fun(PeerName,FingerPrint) in the accept_callback option passed the local name in the argument PeerName instead of the remote name. * common_test: OTP internal test improvements.- Update to 21.3.3: - Changes for 21.3.3: * http://erlang.org/download/OTP-21.3.3.README * erts: Fixed a bug in seq_trace:reset_trace/0 that could crash the emulator. * erts: Fixed bug in process_info(reductions) causing it to sometimes return invalid results. * kernel/stdlib: Fixed a performance regression when reading files opened with the compressed flag.- Update to 21.3.2: - Changes for 21.3.2: * http://erlang.org/download/OTP-21.3.2.README * erts: If a suspend/resume signal pair was sent to a process while it was executing dirty, the receiving process could later end up in a suspended state indefinitely. This bug was introduced in ERTS version 10.0 (OTP 21.0). * etrs: Fix a possible deadlock when terminating the ERTS caused by a dirty scheduler not releasing it's run-queue lock when terminating. * xmerl: Handling of character references in attributes are fixed. * xmerl: Normalization of whitespace characters in attributes are fixed so it works when character references are used.- Update to 21.3.1: - Changes for 21.3.1: * http://erlang.org/download/OTP-21.3.1.README * erl_interface: Fixed two bugs in the erl_call program. A missing initialization (introduced in erl_interface-3.11) which either caused a crash or failure to connect to or start a node, and an incorrectly calculated timeout which could cause failure to start an erlang node. These bugs only caused failures on some platforms. * ssl: The timeout for a passive receive was sometimes not cancelled and later caused a server crash. This bug has now been corrected. * ssl: Add tag for passive message (active N) in cb_info to retain transport transparency. - Update to 21.3: - Changes for 21.3: * http://erlang.org/download/OTP-21.3.README * Erlang/OTP 21.3 is the third service release for the 21st major release with improvements, as well as a few features * Highlights * Kernel: The standard logger handler, logger_std_h, now has a new internal feature for log rotation. For full information see the documentation. * SSL:The Reason part of the error return from the functions connect and handshake has a better and documented format. This is a potential incompatibility. See the documentation. Refactoring of state handling has improved the TLS application data throughput and reduced CPU overhead Code optimizations has reduced CPU load for encryption/decryption, especially for Erlang's distribution protocol over TLS Now supports active N * Erl_interface: Support for plugin of a user supplied socket implementation has been added. * OTP:The HTML reference documentation now shows the OTP version where modules and functions were first introduced. Versions of OTP older than R13B04 is not shown in the reference documentation * For a full list of details see: http://erlang.org/download/otp_src_21.3.readme - Update to 21.2.7: - Changes for 21.2.7: * http://erlang.org/download/OTP-21.2.7.README * erts, otp: Fixes of install/release phase in build system. - - The source tree was modified when installing/releasing and/or applying a patch. - - Some files were installed with wrong access rights. - - If applying a patch (using otp_patch_apply) as another user (except root) than the user that built the source, the documentation was not properly updated. * erts, kernel: Setting the recbuf size of an inet socket the buffer is also automatically increased. Fix a bug where the auto adjustment of inet buffer size would be triggered even if an explicit inet buffer size had already been set. * erts: Reading from UDP using active true or active N mode has been optimized when more packets than specified by read_packets are available on the socket. * erts, kernel: Setting the recbuf size of an inet socket the buffer is also automatically increased. Fix a bug where the auto adjustment of inet buffer size would be triggered even if an explicit inet buffer size had already been set.- Update to 21.2.6: - Changes for 21.2.6: * http://erlang.org/download/OTP-21.2.6.README * erts: When using the {linger,{true,T}} option; gen_tcp:listen/2 used the full linger time before returning for example eaddrinuse. This bug has now been corrected. * stdlib: Optimize pretty printing of terms. The slower behaviour was introduced in Erlang/OTP 20.- Drop unsupported openSUSE versions- Update to 21.2.5: - Changes for 21.2.5: * http://erlang.org/download/OTP-21.2.5.README * inets: Fixed bug that causes a crash in http client when using hostnames (e.g. localhost) with the the option ipv6_host_with_brackets set to true. This change also fixes a regression: httpc:request fails with connection error (nxdomain) if option ipv6_host_with_brackets set to true and host component of the URI is an IPv6 address.- update to 21.2.4: - Changes for 21.2.4: * http://erlang.org/download/OTP-21.2.4.README * erts: Fix bug where doing a gen_tcp:send on a socket with delay_send set to true could cause a segfault if the other side closes the connection. Bug was introduced in erts-10.2 (OTP-21.2). * erts: Fix a race condition when a port program closes that could result in the next started port to hang during startup. Bug was introduced in erts-10.0 (OTP-21.0). * erts: Fix a bug where polling for external events could be delayed for a very long time if all active schedulers were 100% loaded. Bug was introduced in erts-10.2 (OTP-21.2). * inets: Make sure ipv6 addresses with brackets in URIs are converted correctly before passing to lower level functions like gen_tcp and ssl functions. Could cause connection to fail. - update to 21.2.3: - Changes for 21.2.3: * http://erlang.org/download/OTP-21.2.3.README * compiler: An optimization that avoided allocation of a stack frame for some case expressions was introduced in OTP 21. (ERL-504/OTP-14808) It turns out that in rare circumstances, this optimization is not safe. Therefore, this optimization has been disabled. * erts: Fixed a crash when dangling files were closed after init:restart/0. * erts: A bug that could cause dirty schedulers to become unresponsive has been fixed. * ssl: Fix encoding of the SRP extension length field in ssl. The old encoding of the SRP extension length could cause interoperability problems with third party SSL implementations when SRP was used. * ssl: Guarantee active once data delivery, handling TCP stream properly. Correct gen_statem returns for some error cases * xmerl: The charset detection parsing crash in some cases when the XML directive is not syntactic correct.- update to 21.2.2: - Changes for 21.2.2: * http://erlang.org/download/OTP-21.2.2.README * ssh: Fixed port leakage if a ssh:daemon call failed. - update to 21.2.1: - Changes for 21.2.1: * http://erlang.org/download/OTP-21.2.1.README * erts: Fixed bug on big endian architectures when changing file permissions or ownership with file:change_mode, change_owner, change_group or write_file_info. Bug exists since OTP-21.0. * erts: Fixed bug in operator band of two negative operands causing erroneous result if the absolute value of one of the operands have the lowest N*W bits as zero and the other absolute value is not larger than N*W bits. N is an integer of 1 or larger and W is 32 or 64 depending on word size. * ssl: Fixed renegotiation bug. Client did not handle server initiated renegotiation correctly after rewrite to two connection processes, due to ERL-622 commit d87ac1c55188f5ba5cdf72384125d94d42118c18. This could manifest it self as a " bad_record_mac" alert. Also included are some optimizations - update to 21.2: - Changes for 21.2: * http://erlang.org/download/OTP-21.2.README * HIGHLIGHTS * erts, sasl: New counters and atomics modules supplies access to highly efficient operations on mutable fixed word sized variables. * erts: There is a new module persistent_term that implements a term storage suitable for terms that are frequently used but never or infrequently updated. Lookups are done in constant time without copying the terms. * ssh: Requires OpenSSL 1.1.1 or higher as cryptolib under the OTP application crypto. * ssl: *** POTENTIAL INCOMPATIBILITY *** ssl now uses active n internally to boost performance. Old active once behavior can be restored by setting application variable see manual page for ssl application (man 6). * erts: Add a new pollset that is made to handle sockets that use {active, true} or {active, N}. The new pollset will not be polled by a pollthread, but instead polled by a normal scheduler. This change was made because of the overhead associated with constantly having to re-apply the ONESHOT mechanism on fds that all input events were interesting. The new pollset is only active on platforms that support concurrent kernel poll updates, i.e. Linux and BSD. * POTENTIAL INCOMPATIBILITIES: kernel: A new function, logger:update_handler_config/3 is added, and the handler callback changing_config now has a new argument, SetOrUpdate, which indicates if the configuration change comes from set_handler_config/2,3 or update_handler_config/2,3. This allows the handler to consistently merge the new configuration with the old (if the change comes from update_handler_config/2,3) or with the default (if the change comes from set_handler_config/2,3). The built-in handlers logger_std_h and logger_disk_log_h are updated accordingly. A bug which could cause inconsistency between the handlers' internal state and the stored configuration is also corrected. * ssl: ssl now uses active n internally to boost performance. Old active once behavior can be restored by setting application variable see manual page for ssl application (man 6). * full relase notes here: http://erlang.org/download/OTP-21.2.README- Drop crypto.patch: isn't required anymore Reported by Gabriele Santomaggio- update to 21.1.4: - Changes for 21.1.4: * http://erlang.org/download/OTP-21.1.4.README * kernel: Fix bug causing net_kernel process crash on connection attempt from node with name identical to local node. - update to 21.1.3: - Changes for 21.1.3: * http://erlang.org/download/OTP-21.1.3.README * erts: Added an optional ./configure flag to compile the emulator with spectre mitigation: - -with-spectre-mitigation Note that this requires a recent version of GCC with support for spectre mitigation and the - -mindirect-branch=thunk flag, such as 8.1.- Pack /etc/init.d/epmd only for systemd-less cases (boo#1116009)- update to 21.1.2: - Changes for 21.1.2: * http://erlang.org/download/OTP-21.1.2.README * compiler: Fixed a bug where incorrect code was generated following a binary match guard. * erts: Fixed a rare bug where files could be closed on a normal instead of an IO scheduler, resulting in system instability if the operation blocked. * public_key: Add DSA SHA2 oids in public_keys ASN1-spec and public_key:pkix_sign_types/1- Fix instructions for changing address for epmd.socket service. The ListenStream option needs to be completely overriden otherwise the socket will be started with multiple ListenStream options and it will fail.- update to 21.1.1: - Changes for 21.1.1: - http://erlang.org/download/OTP-21.1.1.README * erts: Fixed a memory leak on errors when reading files. * ssl: From ssl-9.0.2. CLOSE ALERTS could under some circumstances be encoded using an incorrect cipher state. This would cause the peer to regard them as unknown messages. * ssl: Correct handling of socket packet option with new TLS sender process, from ssl-9.0.2. When changing the socket option {packet, 1|2|3|4} with ssl:setopts/2 the option must internally be propagated to the sender process as well as the reader process as this particular option also affects the data to be sent. * eldap: A race condition at close could cause the eldap client to exit with a badarg message as cause. - Changes for 21.1: - http://erlang.org/download/OTP-21.1.README * ssh: The key exchange methods 'curve25519-sha256@libssh.org', 'curve25519-sha256' and 'curve448-sha512' are implemented. The last two are defined in https://tools.ietf.org/html/draft-ietf-curdle-ssh-curves They all depends on that OpenSSL 1.1.1 or higher is used as cryptolib. * crypto: The typing in the CRYPTO and PUBLIC_KEY applications are reworked and a few mistakes are corrected. The documentation is now generated from the typing and some clarifications are made. A new chapter on Algorithm Details such as key sizes and availability is added to the CRYPTO User's Guide. * erts: The socket options recvtos, recvttl, recvtclass and pktoptions have been implemented in the socket modules. See the documentation for the gen_tcp, gen_udp and inet modules. Note that support for these in the runtime system is platform dependent. Especially for pktoptions which is very Linux specific and obsoleted by the RFCs that defined it. * ssh: The cipher 'chacha20-poly1305@openssh.com' is now supported if OpenSSL 1.1.1 or higher is used as cryptolib. - Changes for 21.0.9: - http://erlang.org/download/OTP-21.0.9.README * compiler: Fix a regression in OTP-15204 that removed .beam file metadata that some external build tools relied on. * erts: As of ERTS version 10.0 (OTP 21.0) the erl_child_setup program, which creates port programs, ignores TERM signals. This setting was unintentionally inherited by port programs. Handling of TERM signals in port programs has now been restored to the default behavior. That is, terminate the process. * erts: The fix made for OTP-15279 in erts-10.07 (OTP-21.0.8) was not complete. It could cause a new connection attempt to be incorrectly aborted in certain cases. This fix will amend that flaw. - Changes for 21.0.8: - http://erlang.org/download/OTP-21.0.8. * erts: A process could get stuck in an infinite rescheduling loop between normal and dirty schedulers. This bug was introduced in ERTS version 10.0. * erts: Garbage collection of a distribution entry could cause an emulator crash if net_kernel had not brought previous connection attempts on it down properly. * kernel: Fixed bug in net_kernel that could cause an emulator crash if certain connection attempts failed. Bug exists since kernel-6.0 (OTP-21.0). - Changes for 21.0.7: - http://erlang.org/download/OTP-21.0.7. * erts: A race between termination of a process and resume of the same process via erlang:resume_process/1 could cause the VM to crash. This bug was introduced in erts version 10.0 (OTP 21.0). * erts: When tracing on running, in trace events could be lost when a process was rescheduled between a dirty and a normal scheduler. - Changes for 21.0.6: - http://erlang.org/download/OTP-21.0.6.README * crypto: Update the crypto engine functions to handle multiple loads of an engine. * inets: Change status code for no mod found to handle request to 501 * ssl: Correct cipher suite handling for ECDHE_*, the incorrect handling could cause an incorrrect suite to be selected and most likly fail the handshake. - Changes for 21.0.5: - http://erlang.org/download/OTP-21.0.5.README * POTENTIAL INCOMPATIBILITIES erts: Fixed a bug causing some Erlang references to be inconsistently ordered. This could for example cause failure to look up certain elements with references as keys in search data structures. This bug was introduced in R13B02. * compiler: Fixed an issue where files compiled with the +deterministic option differed if they were compiled in a different directory but were otherwise identical. * crypto: Fixed a node crash in crypto:compute_key(ecdh, ...) when passing a wrongly typed Others argument. * erts: Fixed a bug which caused an emulator crash when enif_send() was called by a NIF that executed on a dirty scheduler. The bug was either triggered when the NIF called enif_send() without a message environment, or when the process executing the NIF was send traced. - Changes for 21.0.4: - http://erlang.org/download/OTP-21.0.4.README * erts: Fixed a crash when matching directly against a literal map using a single key that had been saved on the stack. * erts: Fix node crash when passing a bad time option to file:read_file_info/2. - Changes for 21.0.3: - http://erlang.org/download/OTP-21.0.3.README * otp: Build support for the erlang/corba repository. * erts: Fixed a scheduler bug that caused normal schedulers to run dirty code. * erts: Fixed a bug in erlang:trace_info/2 which caused the emulator to crash when a bad argument was passed. The bug was introduced in ERTS version 10.0. - Changes for 21.0.2: - http://erlang.org/download/OTP-21.0.2.README * compiler: In rare cases involving matching of binary literal strings, the compiler could optimize away code that should be executed. * compiler:There could be an internal consistency check failure when compiling code that called map_get(Key, Map) and then updated the same map. * compiler: In rare circumstances, the compiler could crash in beam_jump when compiling a floating point operation. * erts: Fixed a rare bug that could cause processes to be scheduled after they had been freed * erts: Fixed a race condition in the inet driver that could cause receive to hang when the emulator was compiled with gcc 8. * public_key: Fix some of the keylengths in the newly generated moduli file in public_key are not universally supported. This could cause the SSH key exchange diffie-hellman-group-exchange-sha* to fail. Those keylengths are now removed. * stdlib: Fix a bug that could cause a crash when formatting a list of non-characters using the control sequences p or P and limiting the output with the option chars_limit. - Changes for 21.0.1: - http://erlang.org/download/OTP-21.0.1. * compiler:The compiler could crash when compiling a complicated function that used the binary syntax. - Changes for 21.0: - http://erlang.org/download/otp_src_21.0.readme * Erlang/OTP 21 is a new major release with new features, improvements as well as incompatibilities. * Potential Incompatibilities: - All Corba applications are now moved from the OTP repository - A new Corba repository will be created https://github.com/erlang - New applications ftp and tftp, moved from inets - ssl no longer supports 3_DES cipher suites or RSA-key exchange cipher suites by default - Erlang:monitor on a primitive node (erl_interface, jinterface, etc) will no longer fail with badarg exception. Instead a monitor will be created, but it will only supervise the connection to the node. * Highlights: * Erts: - Enhanced IO scalability - Support for usage of distribution controller processes for alternative transports, routing etc - compact instructions on 64bit systems for code below 4GB 20% less memory for loaded code - Rewrite of the efile-driver with NIFs and "Dirty schedulers" resulting in faster file operations non-smp VM removed - link and monitor optimized for scalability- update to 20.3.8.9: - Changes for 20.3.8.9: - http://erlang.org/download/OTP-20.3.8.9.README * Fix a regression in OTP-15204 that removed .beam file metadata - Changes for 20.3.8.8: - http://erlang.org/download/OTP-20.3.8.8.README * inets: Do not use chunked-encoding with 1xx, 204 and 304 responses when using mod_esi * inets: Add robust handling of chunked-encoded HTTP responses with an empty body (1xx, 204, 304) - Changes for 20.3.8.7: - http://erlang.org/download/OTP-20.3.8.7.README * crypto: Update the crypto engine functions to handle multiple loads of an engine * mnesia: Fixed a bug where the bag table index data was not deleted when objects were deleted.- Update to 20.3.8.6: * inets: Change status code for no mod found to handle request to 501- Update to 20.3.8.5. - Changes for 20.3.8.5: * erts: Fixed a bug causing some Erlang references to be inconsistently ordered. This could for example cause failure to look up certain elements with references as keys in search data structures. This bug was introduced in R13B02. Thanks to Simon Cornish for finding the bug and supplying a fix. * compiler: Fixed an issue where files compiled with the +deterministic option differed if they were compiled in a different directory but were otherwise identical. * crypto: Fixed a node crash in crypto:compute_key(ecdh, ...) when passing a wrongly typed Others argument. * erts: Fixed a bug which caused an emulator crash when enif_send() was called by a NIF that executed on a dirty scheduler. The bug was either triggered when the NIF called enif_send() without a message environment, or when the process executing the NIF was send traced. * erts: Fixed a bug causing some Erlang references to be inconsistently ordered. This could for example cause failure to look up certain elements with references as keys in search data structures. This bug was introduced in R13B02. Thanks to Simon Cornish for finding the bug and supplying a fix. * mnesia: When master node is set do not force a load from ram_copies replica when there are no available disc_copies, since that would load an empty table. Wait until a disk replica is available or until user explicitly force_loads the table. * mnesia: Allow to add replicas even if all other replicas are down when the other replicase are not stored on disk. * ssl: Correct handling of empty server SNI extension * ssl: Correct cipher suite handling for ECDHE_*, the incorrect handling could cause an incorrrect suite to be selected and most likly fail the handshake. - Changes for 20.3.8.4: * asn1: A bug in ASN.1 BER decoding has been fixed. When decoding a recursively enclosed term the length was not propagated to that term decoding, so if the length of the enclosed term was longer than the enclosing that error was not dectected. A hard coded C stack limitation for decoding recursive ASN.1 terms has been introduced. This is currently set to 8 kWords giving a nesting depth of about 1000 levels. Deeper terms can not be decoded, which should not be much of a real world limitation. - Changes for 20.3.8.3: * erts: Fixed a race condition in the inet driver that could cause receive to hang when the emulator was compiled with gcc8. * erts: Fix bug in generation of erl_crash.dump, which could cause VM to crash. Bug exist since erts-9.2 (OTP-20.2). * ic: Fixed potential buffer overflow bugs in oe_ei_encode_long/ulong/longlong/ulonglong functions on 64-bit architectures. These functions expect 32 bit integers as the IDL type "long" is defined as 32 bits. But there is nothing preventing user code from "breaking" the interface and pass larger values on 64-bit architectures where the C type "long" is 64 bits. * inets: Enhance error handling, that is mod_get will return 403 if a path is a directory and not a file. * kernel: Non semantic change in dist_util.erl to silence dialyzer warning. * ssl: Improve cipher suite handling correcting ECC and TLS-1.2 requierments. Backport of solution for ERL-641 * ssl: Option keyfile defaults to certfile and should be trumped with key. This failed for engine keys. - Changes for 20.3.8.2: * erl_interface: Make ei_connect and friends also accept state ok_simultaneous during handshake, which means the other node has initiated a connection setup that will be cancelled in favor of this connection. * erts: Fixed a rare bug that could cause processes to be scheduled after they had been freed. * ic: Fixed bug in ic causing potential buffer overrun in funtion oe_ei_encode_atom. Bug exists since ic-4.4.4 (OTP-20.3.4). * kernel: Fix some potential buggy behavior in how ticks are sent on inter node distribution connections. Tick is now sent to c-node even if there are unsent buffered data, as c-nodes need ticks in order to send reply ticks. The amount of sent data was also calculated wrongly when ticks were suppressed due to unsent buffered data. - Changes for 20.3.8.1: * inets: Options added for setting low-level properties on the underlying TCP connections. The options are: sock_ctrl, sock_data_act and sock_data_pass. See the manual for details. * ssh: SFTP clients reported the error reason "" if a non-OTP sftp server was killed during a long file transmission. Now the signal name (for example "KILL") will be the error reason if the server's reason is empty. The documentation also lacked type information about this class of errors. * ssh: Fix ssh_sftp decode error for sftp protocol version 4 * syntax_tools: Fix a bug regarding reverting map types. - Changes for 20.3.8: * erts: Fixed bug in ets that could cause VM crash if process A terminates after fixating a table and process B deletes the table at "the same time". The table fixation could be done with ets:safe_fixtable or if process A terminates in the middle of a long running select or match call. * snmp: The Snmp MIB compiler now allows using a TEXTUAL-CONVENTION type before defining it. - Changes for 20.3.7: * erl_docgen: Update makefile so db_funcs.xsl is a part of the installed application. * erts: Fixed bug in enif_binary_to_term which could cause memory corruption for immediate terms (atoms, small integers, pids, ports, empty lists). * erts: Fixed bug in erlang:system_profile/2 that could cause superfluous {profile,_,active,_,_} messages for terminating processes. * inets: The option max_headers operated on the individual header length instead of the total length of all headers. Also headers with empty keys are now discarded. - Changes for 20.3.6: * crypto: If OPENSSL_NO_EC was set, the compilation of the crypto nifs failed. * crypto: C-compile errors for LibreSSL 2.7.0 - 2.7.2 fixed * ssh: Host key hash erroneously calculated for clients following draft-00 of RFC 4419, for example PuTTY * ssh: Renegotiation could fail in some states - Changes for 20.3.5: * erts: Fixed a crash in heart:get_cmd/0 when the stored command was too long. * ssl: Proper handling of clients that choose to send an empty answer to a certificate request. - Changes for 20.3.4: * erl_interface: Fix bug in ei_connect functions that may cause failure due to insufficient buffer space for gethostbyname_r. * erl_interface, ic: Optimize encoding/decoding for pure 7-bit ascii atoms. * inets: Fix broken options handling in httpc (ERL-441). * ssh: An ssh_sftp server (running version 6) could fail if it is told to remove a file which in fact is a directory. * ssh: Fix rare spurios shutdowns of ssh servers when receiveing {'EXIT',_,normal} messages. - Changes for 20.3.3: * sasl: When upgrading with instruction 'restart_new_emulator', the generated temporary boot file used 'kernelProcess' statements from the old release instead of the new release. This is now corrected.- Update to 20.3.2 * ssl: Added new API functions to facilitate cipher suite handling * erts, observer: More crash dump info such as: process binary virtual heap stats, full info for process causing out-of-mem during GC, more port related info, and dirty scheduler info. * inets: Add support for unix domain sockets in the http client.- Update to 20.2.2. - Changes for 20.2.2: * mnesia: Removed a quadratic behavior in startup. This change implies that backend plugins (if used) must be set when the schema is created or via configuration parameters before mnesia is started. * mnesia: Bad timing could crash mnesia after a checkpoint was deactivated and reactivated with the same checkpoint name on different tables. - Changes for 20.2.1: * ssh: Fix problem with OpenSSH 7.2 (and later) clients that has used sha1 instead of sha2 for rsa-sha-256/512 user's public keys. - Highlighted changes for 20.2: * crypto, ssl: The crypto API is extended to use private/public keys stored in an Engine for sign/verify or encrypt/decrypt operations. The ssl application provides an API to use this new engine concept in TLS. * ssh: SSH can now fetch the host key from the private keys stored in an Engine. See the crypto application for details about Engines. * ssl: A new command line option -ssl_dist_optfile has been added to facilitate specifying the many options needed when using SSL as the distribution protocol. * stdlib: Improve performance of the new string functionality when handling ASCII characters.- Update to 20.1.5: * erts: Fixed a regression in zlib:gunzip/1 that prevented it from working when the decompressed size was a perfect multiple of 16384. This regression was introduced in 20.1.1 * erts: Fixed a memory corruption bug in enif_inspect_iovec; writable binaries stayed writable after entering the iovec. * erts: Fixed a crash in enif_inspect_iovec on encountering empty binaries. * erts: zlib:deflateParams/3 will no longer return buf_error when called after zlib:deflate/2 with zlib 1.2.11. * inets: Correct the handling of location headers so that the status code is not hard coded. This should have been fixed by commit 2cc5ba70cbbc6b3ace81a2a0324417c3b65265bb but unfortunately was broken during a code refactoring and unnoticed due to a faulty placed test case. - Update to 20.1.4: * inets: Fix broken handling of POST requests * inets: Make sure ints:stop/2 of the service httpd is synchronous * inets: Honor status code returned by ESI script and modernize "location" header handling. - Update to 20.1.3: * diameter: A fault introduced in diameter 2.1 could cause decode errors to be ignored in AVPs following the header of aGrouped AVP. * erts: Added zlib:set_controlling_process/2 to move a zstream() between processes. * erts: Fix so that schedulers are bound correctly when the first available cpu is not the first detected cpu. e.g. when using "taskset -c X..Y" when X is not equal to 0. * snmp: The recbuf configuration option was not propagated correctly to the socket for the SNMP Manager.- Replace references to /var/adm/fillup-templates with new %_fillupdir macro (boo#1069468)- Update to 21.1.2: * diameter: An inadvertently removed monitor in diameter 2.1 caused the ets table diameter_reg to leak entries, and caused service restart and more to fail. * erts: Fixed bug that could cause a VM crash when a corrupt message is received on distribution channel from other node. - Update to 20.1.1: * compiler: The compiler could issue an incorrect internal consistency failure diagnostic for some complicated bit syntax maches. * erts: The new zlib module returned a data_error when inflating concatenated streams, which was incompatible with the old module's behavior of returning the uncompressed data up to the end of the first stream. * erts: zlib:gunzip/1 will no longer stop at the end of the first stream when decompressing concatenated gzip files. * ssh: Fixed broken printout * ssh: Disable aes_gcm ciphers if peer is OpenSSH 6.2 which is known to have trouble with them in some cases. - Update to 20.1: * crypto, public_key: Extend crypto and public_key functions sign and verify with: support for RSASSA-PS padding for signatures and for saltlength setting X9.31 RSA padding. sha, sha224, sha256, sha384, and sha512 for dss signatures as mentioned in NIST SP 800-57 Part 1. ripemd160 to be used for rsa signatures. A new tuple in crypto:supports/0 reports supported MAC algorithms. * diameter: Add service option decode_format to allow incoming messages to be decoded into maps instead of records. Decode performance has been improved. Add service/transport option avp_dictionaries to give better support for dictionaries only defining AVPs. * erts: Upgraded the ERTS internal PCRE library from version 8.40 to version 8.41. * erts, kernel, tools: Profiling with lock counting can now be fully toggled at runtime in the lock counting emulator (-emu_type lcnt). Everything is enabled by default to match the old behavior, but specific categories can be toggled at will with minimal runtime overhead when disabled. Refer to the documentation on lcnt:rt_mask/1 for details. * lcnt:collect and lcnt:clear will no longer block all other threads in the runtime system. This makes it possible to run the lock counting under heavier load. * erts: The zlib module has been refactored and all its operations will now yield appropriately, allowing them to be used freely in concurrent applications. * erts, tools: Add erlang:iolist_to_iovec/1, which converts an iolist() to an erlang:iovec(), which is suitable for use with enif_inspect_iovec(). * erts: Add new nif API functions for managing an I/O Queue. The added functions are: enif_ioq_create(), enif_ioq_destroy(), enif_ioq_enq_binary(), enif_ioq_enqv(), enif_ioq_deq(), enif_ioq_peek(), enif_inspect_iovec(), enif_free_iovec() * observer/crashdump_viewer: Reading of crash dumps with many binaries is optimized. A progress bar is shown when the detail view for a process is opened. The cdv script now sets ERL_CRASH_DUMP_SECONDS=0 to avoid generating a new crash dump from the node running the Crashdump Viewer. * observer: Add system statistics and limits to frontpage in observer. * public_key, ssl**: Improved error propagation and reports * ssh: A new option modify_algorithms is implemented. It enables specifying changes on the default algorithms list. See the reference manual and the SSH User's Guide chapter "Configuring algorithms in SSH". * tools/xref: The predefined Xref analysis locals_not_used now understands the -on_load() attribute and does not report unused functions. * tools/fprof: When sampling multiple processes and analyzing with totals set to true, the output now sums together all caller and callee entries which concerns the same function. Previous behaviour was to report each contributing entry separately.- Only Java 1.6 is supported by Erlang since 18.0 release- Update to 20.0.5: * erts: Fixed bug in binary_to_term and binary_to_atom that could cause VM crash. Typically happens when the last character of an UTF8 string is in the range 128 to 255, but truncated to only one byte. Bug exists in binary_to_term since ERTS version 5.10.2 (OTP_R16B01) and binary_to_atom since ERTS version 9.0 (OTP-20.0). * inets: http_uri aligned to follow RFC 3986 and not convert "+" to space when decoding URIs. * inets: Added new option max_client_body_chunk to httpd server to allow chunked delivery of PUT and POST data to mod_esi callback. Note, new mod_esi callback implementation is required. Also correct value provided by server_name environment variable.- Update to 20.0.4: * dializer: Fix a bug where merging PLT:s could lose info. The bug was introduced in Erlang/OTP 20.0. * erts: A timer internal bit-field used for storing scheduler id was too small. As a result, VM internal timer data structures could become inconsistent when using 1024 schedulers on the system. Note that systems with less than 1024 schedulers are not effected by this bug. This bug was introduced in ERTS version 7.0 (OTP 18.0). * erts: Automatic cleanup of a BIF timer, when the owner process terminated, could race with the timeout of the timer. This could cause the VM internal data structures to become inconsistent which very likely caused a VM crash. This bug was introduced in ERTS version 9.0 (OTP 20.0). - Update to 20.0.3: * asn1: Default values now work in extension for PER, so if you give the atom asn1_DEFAULT instead of a value it will become the default value. * compiler: Fail labels on guard BIFs weren't taken into account during an optimization pass, and a bug in the validation pass sometimes prevented this from being noticed when a fault occurred. * erts: Binary append operations did not check for overflow, resulting in nonsensical results when huge binaries were appended. * ssh: All unknown options are sent to the transport handler regardless of type.- Update to 20.0.2: * asn: Fixed compilation error of generated code caused by a missing quotation of function names as part of an external call for encoding. * erts: Added missing release notes for OTP-14491 ("performance bug in pre-allocators") which was included in erts-9.0.1 (OTP-20.0.1). * erts: Fixed a bug that prevented TCP sockets from being closed properly on send timeouts. * erts: Fixed bug in operator bxor causing erroneuos result when one operand is a big *negative* integer with the lowest N*W bits as zero and the other operand not larger than N*W bits. N is an integer of 1 or larger and W is 32 or 64 depending on word size. * kernel: The documentation for the 'quiet' option in disk_log:open/1 had an incorrect default value.- erlang-gs application has been depricated- Update to 20.0.1: * erts: Fixed a bug in gen_tcp:send where it never returned when repeatedly called on a remotely closed TCP socket. * erts: Fixed segfault that could happen during cleanup of aborted erlang:port_command/3 calls. A port_command is aborted if the port is closed at the same time as the port_command was issued. This bug was introduced in erts-8.0. * erts: Fixed implementation of statistics(wall_clock) and statistics(runtime) so that values do not unnecessarily wrap due to the emulator. Note that the values returned by statistics(runtime) may still wrap due to limitations in the underlying functionality provided by the operating system. * erts: Fix performance bug in pre-allocators that could cause them to permanently fall back on normal more expensive memory allocation. Pre-allocators are used for quick allocation of short lived meta data used by messages and other scheduled tasks. Bug exists since OTP_R15B02. * runtime_tools: A faulty encoding comment was added when saving trace patterns to file. This is now corrected. * stdlib: A bug in proc_lib:format() introduced in Erlang/OTP 20.0 is corrected. * stdlib: Fix string:len/1 to be compatible with previous versions. * stdlib: In OTP-20.0, the behavior of c, make, and ct_make was changed so that in some cases the beam files by default would be written to the directory where the source files were found. This is now changed back to the old behavior so beam files are by default written to current directory. - Update to 20.0.0: * Potential Incompatibilities * ERTS: * The non SMP Erlang VM is deprecated and not built by default * Remove deprecated erlang:hash/2 * erlang:statistics/1 with scheduler_wall_time now also includes info about dirty CPU schedulers. * The new purge strategy introduced in OTP 19.1 is mandatory and slightly incompatible for processes holding funs * see erlang:check_process_code/3. * The NIF library reload is not supported anymore. * Atoms can now contain arbitrary unicode characters which means that the DFLAG_UTF8_ATOMS capability in the distribution protocol must be supported if an OTP 20 node should accept the connection with another node or library. Third party libraries which uses the distribution protocol need to be updated with this. * Asn1: Deprecated module and functions removed (asn1rt, asn1ct:encode/3 and decode/3) * Ssh: client only option in a call to start a daemon will now fail * Highlights * Erts: * Dirty schedulers enabled and supported on VM with SMP support. * support for “dirty” BIFs and “dirty” GC. * erlang:garbage_collect/2 for control of minor or major GC * Erlang literals are no longer copied when sending messages. * Improved performance for large ETS tables, >256 entries (except ordered_set) * erlang:system_info/1 atom_count and atom_limit * Reduced memory pressure by converting sub-binaries to heap-binaries during GC * enif_select, map an external event to message * Improvements of timers internally in the VM resulting in reduced memory consumption and more efficient administration for timers * Compiler: * Code generation for complicated guards is improved. * Warnings for repeated identical map keys. #{'a'=>1, 'b'=>2, 'a'=>3} will warn for the repeated key a. * By default there is now a warning when export_all is used. Can be disabled * Pattern matching for maps is optimized * New option deterministic to omit path to source + options info the BEAM file. * Atoms may now contain arbitrary unicode characters. * compile:file/2 has an option to include extra chunks in the BEAM file. * Misc other applications: * Significantly updated string module with unicode support and many new functions * crypto now supports OpenSSL 1.1 * Unnamed ets tables optimized * gen_fsm is deprecated and replaced by gen_statem * A new event manager to handle a subset of OS signals in Erlang * Optimized sets add_element, del_element and union * Added rand:jump/0-1 * When a gen_server crashes, the stacktrace for the client will be printed to facilitate debugging. * take/2 has been added to dict, orddict, and gb_trees. * take_any/2 has been added to gb_trees * erl_tar support for long path names and new file formats * asn1: the new maps option changes the representation of SEQUENCE to be maps instead of records * A TLS client will by default call public_key:pkix_verify_hostname/2 to verify the hostname * ssl: DTLS documented in the API, experimental * ssh: improving security, removing and adding algorithms * New math:fmod/2- Disable global PIE for erlang, code is currently not fully ready.- Update to 19.3.2: * erts: The +Bi command line argument of erl erroneously caused SIGTERM to be ignored by the VM as well as of all its child processes. This bug was introduced in erts version 8.3.- Update to 19.3.1: * crypto: Fix a bug with AES CFB 128 for 192 and 256 bit keys. Thanks to kellymclaughlin ! * erts: Trying to open a directory with file:read_file/1 on Unix leaked a file descriptor. This bug has now been fixed. * erts: Invoking init:stop/0 via the SIGTERM signal, in a non-SMP BEAM, could cause BEAM to terminate with fatal error. This has now been fixed and the BEAM will terminate normally when SIGTERM is received. * inets: Fixed a bug in ftp that made further operations after a recv_chunk operation impossible. * ssh: ssh:daemon_info/1 crashed if the listening IP was not 'any' * ssl: Correct active once emulation, for TLS. Now all data received by the connection process will be delivered through active once, even when the active once arrives after that the gen_tcp socket is closed by the peer.- Changes since 19.2: * crypto, ssh: The implementation of the key exchange algorithms diffie-hellman-group-exchange-sha* are optimized, up to a factor of 11 for the slowest ( = biggest and safest) group size. * dialyzer: The peak memory consumption is reduced. Analyzing modules with binary construction with huge strings is now much faster. * erts: A received SIGTERM signal to beam will generate a 'stop' message to the init process and terminate the Erlang VM nicely. This is equivalent to calling init:stop/0. * kernel: The functions in the file module that take a list of paths (e.g. file:path_consult/2) will now continue to search in the path if the path contains something that is not a directory. * kernel: Two OTP processes that are known to receive many messages are rex (used by rpc) and error_logger. Those processes will now store unprocessed messages outside the process heap, which will potentially decrease the cost of garbage collections. * public_key: New function pkix_verify_hostname/2,3 implements certificate hostname checking. See the manual and RFC 6125.- * public_key, ssh: The ssh host key fingerprint generation now also takes a list of algorithms and returns a list of corresponding fingerprints. See public_key:ssh_hostkey_fingerprint/2 and the option silently_accept_hosts in ssh:connect. * ssl: Move PEM cache to a dedicated process, to avoid making the SSL manager process a bottleneck. This improves scalability of TLS connections. * stdlib: filename:safe_relative_path/1 to sanitize a relative path has been added.- Add missed scripts requires for erlang-epmd package- Update to 19.2.2: * mnesia: Fixed crash in checkpoint handling when table was deleted during backup.- Update to 19.2: * stdlib: The new behaviour gen_statem has been improved with 3 new features: the possibility to use old style non-proxy timeouts for gen_statem:call/2,3, state entry code, and state timeouts. These are backwards compatible. Minor code and documentation improvements has been performed including a borderline semantics correction of timeout zero handling. * ssl: Experimental version of DTLS. It is runnable but not complete and cannot be considered reliable for production usage. To use DTLS add the option {protocol, dtls} to ssl:connect and ssl:listen. * ssh: Extended the option silently_accept_hosts for ssh:connect to make it possible for the client to check the SSH host key fingerprint string. Se the reference manual for SSH. * ~40 contributions since the previous service release OTP 19.1- Update to 19.1: * erts: Improved dirty scheduler support. A purge of a module will not have to wait for completion of all ongoing dirty NIF calls * erts: Improved accuracy of timeouts on MacOS X * kernel: Add net_kernel:setopts/2 and net_kernel:getopts/2 to control options for distribution sockets in runtime * asn1: Compiling multiple ASN.1 modules in the same directory with parallel make (make -j) should now be safe * httpd: support for PUT and DELETE in mod_esi * ~30 contributions since 19.0- Update to 19.0.4: * erts: Fixed a race that could cause a lost wakeup of a process that timed out in a receive ... after. This bug was introduced in ERTS version 7.0. * erts: Fixed segfault after writing an erl crash dump.- Update to 19.0: * compiler, stdlib: New preprocessor macros *?FUNCTION_NAME, ?FUNCTION_ARITY*. New preprocessor directives -error(Term) and - warning(Term) to cause a compilation error or warning, respectively. * gen_statem: a new state machine behavior * mnesia_ext: plugin of external storage solutions to mnesia * crypto: uses EVP interface in OpenSSL resulting in generally better performance and support for HW acceleration * ssh: performance improvements, uses the new gen_statem behavior * ssl: enhanced error log messages * dialyzer: the support for maps is very much extended both the type specification syntax and the type analysis. * erts: erlang:open_port(spawn, ...) 3-5 times faster * erts/kernel: Experimental support for Unix Domain Sockets * ose: Deprecated application has been removed * webtool: Deprecated application has been removed * test_server: Deprecated application has been removed, use common_test instead- Do not suppress errors from useradd/groupadd - Orthographic/typographical fixes- Update to 18.3.4: * inets: Handle multiple \t in mime types file * ssl: Correct ssl:prf/5 to use the negotiated cipher suite's prf function in ssl:prf/5 instead of the default prf. * ssl: Timeouts may have the value 0, guards have been corrected to allow this * ssl: Change of internal handling of hash sign pairs as the used one enforced to much restrictions making some valid combinations unavailable. * ssl: Create a little randomness in sending of session invalidation messages, to mitigate load when whole table is invalidated.- Return diameter application: as for 18.3.3 it is distributed under APL license- Update to 18.3.3: * common_test: The nodelay option used to be enabled (true) by default for sockets opened by the Common Test telnet client. * common_test: Fix bug in cth_surefire * common_test: The ct:get_timetrap_info/0 function has been updated to return more information about timetrap scaling. * common_test: A problem with stylesheet HTML tags getting incorrectly escaped by Common Test has been corrected. * common_test: The ct_run start flag -no_esc_chars and ct:run_test/1 start option {esc_chars,Bool} have been introduced. * inets: Put back unused module inets_regexp * ssl: Correct cipher suites conversion and gaurd expression.- Update to 18.3.2: * inets: Add environment information item peer_cert to mod_esi * ssl: Corrections to cipher suite handling using the 3 and 4 tuple format * ssl: Make values for the TLS-1.2 signature_algorithms extension configurable- Update to 18.3: * New statistics info about runnable and active processes & ports. Call erlang:statistics with: total_run_queue_lengths | run_queue_lengths | total_active_tasks | active_tasks. * Time warp improvements: dbg:p/2 and erlang:trace/3 with monotonic_timestamp |strict_monotonic_timestamp. * Introduced a validation callback for heart. * The module overload in sasl has been deprecated. * several bug fixes- Update to 18.2.3: * inets: mod_alias now traverses all aliases picking the longest match and not the first match.- Update to 18.2.2: * ssh: The authentication method 'keyboard-interactive' failed in the Erlang client when the server after successful authentication continued by asking for zero more passwords.- Update to 18.2.1: * Due to a bug in the handling of paths on windows none of the following would work with paths containing a space: ct_run dialyzer erlc escript typer This also contains a fix for HiPE enabled emulator for FreeBSD. - Update to 18.2: * ssl: Add configurable upper limit for session cache. erts: Add function enif_getenv to read OS environment variables in a portable way from NIFs. * kernel: Add {line_delim, byte()} option to inet:setopts/2 and decode_packet/3 * ssh: The 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384' and 'ecdsa-sha2-nistp521' signature algorithms for ssh are implemented. See RFC5656. * ssh: The ssh:daemon option dh_gex_groups is extended to read a user provided ssh moduli file with generator-modulus pairs. The file is in openssh format.- disable hipe on s390/s390x to fix build- Update to 18.1.3: * ssl: Add possibility to downgrade an SSL/TLS connection to a tcp connection, and give back the socket control to a user process. * ssh: The following new key exchange algorithms are implemented:'ecdh-sha2-nistp256', 'ecdh-sha2-nistp384', 'ecdh-sha2-nistp521','diffie-hellman-group14-sha1', 'diffie-hellman-group-exchange-sha1' and 'diffie-hellman-group-exchange-sha256'. This raises the security level considerably. * kernel,stdlib,sasl: A mechanism for limiting the amount of text that the built-in error logger events will produce has been introduced. It is useful for limiting both the size of log files and the CPU time used to produce them. This mechanism is experimental in the sense that it may be changed based on feedback. See config parameter error_logger_format_depth in the Kernel application. - Removed erts_fix_unlock_status_lock.patch: fixed in upstream- Rework wxWidgets BuildRequire: fix build for Leap 42.1- update to 18.0.3: * erts: Fixed a binary memory leak when printing to shell using the tty driver (i.e. not -oldshell). * erts: Fix a bug where the standard error port sometimes crashes with eagain as the reason.- add erts_fix_unlock_status_lock.patch to fix a rare deadlock in erts- fix RHEL/CentOS 7 build- update to 18.0.2: * Fix processes ending up in an inconsistent half exited state in the runtime system without SMP support * Remove unnecessary copying of data when retrieving corrected Erlang monotonic time. * POTENTIAL INCOMPATIBILITY: Change default OS monotonic clock source chosen at build time. This in order to improve performance. The behavior will now on most systems be that (both OS and Erlang) monotonic time stops when the system is suspended. (changeable via the - -enable-prefer-elapsed-monotonic-time-during-suspend configure parameter) * Fix erlang:system_info(end_time) returning a faulty value on 32-bit architectures. * Fix the trace_file_drv not handling EINTR correctly which caused it to fail when the runtime system received a signal.- update to 18.0.1: * Fix a rare hanging of the VM seen to happen just after emulator start. Bug exists since R14.- update to 18.0: * new license: APL 2.0 (Apache Public License) * erts: The time functionality has been extended. This includes a new API for time, as well as "time warp" modes which alters the behavior when system time changes. You are strongly encouraged to use the new API instead of the old API based on erlang:now/0. erlang:now/0 has been deprecated since it is a scalability bottleneck. See http://www.erlang.org/doc/apps/erts/time_correction.html * erts: Beside the API changes and time warp modes a lot of scalability and performance improvements regarding time management has been made. Examples are: + scheduler specific timer wheels, + scheduler specific BIF timer management, + parallel retrieval of monotonic time and system time on OS:es that support it. * erts: The previously introduced "eager check I/O" feature is now enabled by default. * erts/compiler: enhanced support for maps. Big maps new uses a HAMT (Hash Array Mapped Trie) representation internally which makes them more efficient. There is now also support for variables as map keys. * dialyzer: The -dialyzer() attribute can be used for suppressing warnings in a module by specifying functions or warning options. It can also be used for requesting warnings in a module. * ssl: Remove default support for SSL-3.0 and added padding check for TLS-1.0 due to the Poodle vulnerability. * ssl: Remove default support for RC4 cipher suites, as they are consider too weak. * stdlib: Allow maps for supervisor flags and child specs * stdlib: New functions in ets: + take/2: Works the same as ets:delete/2 but also returns the deleted object(s). + update_counter/4 with a default object as argument- update to 17.5.6: * Fix broken relay counters * Fix diameter_sctp listener race - fix build for SLE_12- Update to 17.5.4- fix systemd service files for epmd: * fix stop of epmd (epmd -kill is deprecated and ignored, so stop hangs)- Update to 17.5: * ERTS: Added command line argument option for setting the initial size of process dictionaries. * Diameter: configurable incoming_max len and string_decode for diameter messages * Bugfixes and minor small features in applications such as compiler, common_test, crypto, debugger, eldap, erts, hipe, inets, ssh, ssl, ... - remoce ct-fix_incl-dirs.patch (included upstream)- add ct-fix_incl-dirs.patch (upstream patch for common test)- Version 17.4: * eldap: Nearly all TCP options are possible to give in the eldap:open/2 call. * ssh: Added API functions ptty_alloc/3 and ptty_alloc/4, to allocate a pseudo tty. * ssl: Handle servers that may send an empty SNI extension to the client.- use wxWidgets 3.0- fix bashisms in pre scriptibs-power9-13 1705505457  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~{|}~      !"#$%&'()*+,-./0123456789:;<=>?@QRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@AB      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}23.3.4.19-150300.3.14.123.3.4.19-150300.3.14.1  !!!!!!!!!! """"""" ############################################# $$$$$$$$$%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'())(************************************************(++++++++++++++++++++++(,,(-------(............................................(////01111111111111111111111111111111123324444566666666666788889:::::::::;<<<<<<<<<<<=>>>>>>>>>>>>>>>>>>?@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA@BBBB@CCCCCCCCCCC@DDDDDDDDDDDDDDDDDDDD@EEEEEEEEEEEFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLMMMMMMMMMMMNOOOOOOOOOPQQQPRRRRRRRRRRRRRRRRRSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTc_srcasn1_erl_nif.csrcasn1.app.srcasn1.appup.srcasn1_db.erlasn1_records.hrlasn1ct.erlasn1ct_check.erlasn1ct_constructed_ber_bin_v2.erlasn1ct_constructed_per.erlasn1ct_eval_ext.erlasn1ct_func.erlasn1ct_gen.erlasn1ct_gen_ber_bin_v2.erlasn1ct_gen_check.erlasn1ct_gen_jer.erlasn1ct_gen_per.erlasn1ct_imm.erlasn1ct_name.erlasn1ct_parser2.erlasn1ct_pretty_format.erlasn1ct_rtt.erlasn1ct_table.erlasn1ct_tok.erlasn1ct_value.erlasn1rt_nif.erlsrcct.erlct_config.erlct_config_plain.erlct_config_xml.erlct_conn_log_h.erlct_cover.erlct_default_gl.erlct_event.erlct_framework.erlct_ftp.erlct_gen_conn.erlct_groups.erlct_hooks.erlct_hooks_lock.erlct_logs.erlct_make.erlct_master.erlct_master_event.erlct_master_logs.erlct_master_status.erlct_netconfc.erlct_netconfc.hrlct_property_test.erlct_release_test.erlct_repeat.erlct_rpc.erlct_run.erlct_slave.erlct_snmp.erlct_ssh.erlct_suite.erlct_telnet.erlct_telnet_client.erlct_testspec.erlct_util.erlct_util.hrlcth_conn_log.erlcth_log_redirect.erlcth_surefire.erlerl2html2.erltest_server.erltest_server_ctrl.erltest_server_gl.erltest_server_io.erltest_server_node.erltest_server_sup.erlunix_telnet.erlsrcbeam_a.erlbeam_asm.erlbeam_block.erlbeam_call_types.erlbeam_clean.erlbeam_dict.erlbeam_digraph.erlbeam_disasm.erlbeam_disasm.hrlbeam_flatten.erlbeam_jump.erlbeam_kernel_to_ssa.erlbeam_listing.erlbeam_opcodes.erlbeam_opcodes.hrlbeam_peep.erlbeam_ssa.erlbeam_ssa.hrlbeam_ssa_bool.erlbeam_ssa_bsm.erlbeam_ssa_codegen.erlbeam_ssa_dead.erlbeam_ssa_funs.erlbeam_ssa_lint.erlbeam_ssa_opt.erlbeam_ssa_opt.hrlbeam_ssa_pp.erlbeam_ssa_pre_codegen.erlbeam_ssa_recv.erlbeam_ssa_share.erlbeam_ssa_type.erlbeam_trim.erlbeam_types.erlbeam_types.hrlbeam_utils.erlbeam_validator.erlbeam_z.erlcerl.erlcerl_clauses.erlcerl_inline.erlcerl_sets.erlcerl_trees.erlcompile.erlcore_lib.erlcore_lint.erlcore_parse.erlcore_parse.hrlcore_parse.yrlcore_pp.erlcore_scan.erlerl_bifs.erlrec_env.erlsys_core_alias.erlsys_core_bsm.erlsys_core_fold.erlsys_core_fold_lists.erlsys_core_inline.erlsys_core_prepare.erlsys_pre_attributes.erlv3_core.erlv3_kernel.erlv3_kernel.hrlv3_kernel_pp.erlsrccrypto.erlcrypto_ec_curves.erlsrcedoc.erledoc.hrledoc_data.erledoc_doclet.erledoc_doclet.hrledoc_extract.erledoc_layout.erledoc_lib.erledoc_macros.erledoc_parser.erledoc_parser.yrledoc_refs.erledoc_report.erledoc_run.erledoc_scanner.erledoc_specs.erledoc_tags.erledoc_types.erledoc_types.hrledoc_wiki.erlsrceldap.erlsrcdocgen_edoc_xml_cb.erldocgen_otp_specs.erldocgen_xmerl_xml_cb.erldocgen_xml_to_chunk.erlsrcMakefileMakefile.inREADMEREADME.internalauxdirconnectei_connect.cei_connect_int.hei_resolve.cei_resolve.heirecv.ceirecv.heisend.hsend.csend_exit.csend_reg.cdecodedecode_atom.cdecode_big.cdecode_bignum.cdecode_binary.cdecode_boolean.cdecode_char.cdecode_double.cdecode_fun.cdecode_intlist.cdecode_iodata.cdecode_list_header.cdecode_long.cdecode_longlong.cdecode_pid.cdecode_port.cdecode_ref.cdecode_skip.cdecode_skip.hdecode_string.cdecode_trace.cdecode_tuple_header.cdecode_ulong.cdecode_ulonglong.cdecode_version.ceidefs.mkencodeeicode.hencode_atom.cencode_big.cencode_bignum.cencode_binary.cencode_boolean.cencode_char.cencode_double.cencode_fun.cencode_list_header.cencode_long.cencode_longlong.cencode_pid.cencode_port.cencode_ref.cencode_string.cencode_trace.cencode_tuple_header.cencode_ulong.cencode_ulonglong.cencode_version.cepmdei_epmd.hepmd_port.cepmd_publish.cepmd_unpublish.cglobalglobal_names.cglobal_register.cglobal_unregister.cglobal_whereis.cmiscei_cmp_nc.cei_compat.cei_decode_term.cei_decode_term.hei_format.cei_format.hei_init.cei_internal.hei_locking.cei_locking.hei_malloc.cei_malloc.hei_portio.cei_portio.hei_printterm.cei_printterm.hei_pthreads.cei_trace.cei_trace.hei_x_encode.cei_x_encode.heidef.heiext.heimd5.ceimd5.hget_type.cputget.hshow_msg.cshow_msg.hprogei_fake_prog.cerl_call.cerl_start.cerl_start.hregistryhash.hhash_dohash.chash_foreach.chash_freetab.chash_insert.chash_isprime.chash_lookup.chash_newtab.chash_remove.chash_resize.chash_rlookup.creg.hreg_close.creg_delete.creg_dirty.creg_dump.creg_free.creg_get.creg_getf.creg_geti.creg_getp.creg_gets.creg_make.creg_open.creg_purge.creg_resize.creg_restore.creg_set.creg_setf.creg_seti.creg_setp.creg_sets.creg_stat.creg_tabstat.csrcatomics.erlcounters.erlerl_init.erlerl_prim_loader.erlerl_tracer.erlerlang.erlerts_code_purger.erlerts_dirty_process_signal_handler.erlerts_internal.erlerts_literal_area_collector.erlinit.erlpersistent_term.erlprim_buffer.erlprim_eval.Sprim_eval.erlprim_file.erlprim_inet.erlprim_net.erlprim_socket.erlprim_zip.erlsocket_registry.erlzlib.erlsrceunit.erleunit_autoexport.erleunit_data.erleunit_internal.hrleunit_lib.erleunit_proc.erleunit_serial.erleunit_server.erleunit_striptests.erleunit_surefire.erleunit_test.erleunit_tests.erleunit_tty.erlsrcftp.erlftp_app.erlftp_progress.erlftp_response.erlftp_sup.erlsrchttp_clienthttpc.erlhttpc_cookie.erlhttpc_handler.erlhttpc_handler_sup.erlhttpc_internal.hrlhttpc_manager.erlhttpc_profile_sup.erlhttpc_request.erlhttpc_response.erlhttpc_sup.erlhttp_libhttp_chunk.erlhttp_internal.hrlhttp_request.erlhttp_response.erlhttp_transport.erlhttp_uri.erlhttp_util.erlhttp_serverhttpd.erlhttpd.hrlhttpd_acceptor.erlhttpd_acceptor_sup.erlhttpd_cgi.erlhttpd_conf.erlhttpd_connection_sup.erlhttpd_custom.erlhttpd_custom_api.erlhttpd_esi.erlhttpd_example.erlhttpd_file.erlhttpd_instance_sup.erlhttpd_internal.hrlhttpd_log.erlhttpd_logger.erlhttpd_manager.erlhttpd_misc_sup.erlhttpd_request.erlhttpd_request_handler.erlhttpd_response.erlhttpd_script_env.erlhttpd_socket.erlhttpd_sup.erlhttpd_util.erlmod_actions.erlmod_alias.erlmod_auth.erlmod_auth.hrlmod_auth_dets.erlmod_auth_mnesia.erlmod_auth_plain.erlmod_auth_server.erlmod_cgi.erlmod_dir.erlmod_disk_log.erlmod_esi.erlmod_get.erlmod_head.erlmod_log.erlmod_range.erlmod_responsecontrol.erlmod_security.erlmod_security_server.erlmod_trace.erlinets_appinets.erlinets_app.erlinets_ftp_wrapper.erlinets_internal.hrlinets_lib.erlinets_service.erlinets_sup.erlinets_tftp_wrapper.erlinets_trace.erlsrcapplication.erlapplication_controller.erlapplication_master.erlapplication_master.hrlapplication_starter.erlauth.erlcode.erlcode_server.erldisk_log.erldisk_log.hrldisk_log_1.erldisk_log_server.erldisk_log_sup.erldist_ac.erldist_util.erlerl_boot_server.erlerl_compile_server.erlerl_ddll.erlerl_distribution.erlerl_epmd.erlerl_epmd.hrlerl_reply.erlerl_signal_handler.erlerpc.erlerror_handler.erlerror_logger.erlerts_debug.erlfile.erlfile_int.hrlfile_io_server.erlfile_server.erlgen_sctp.erlgen_tcp.erlgen_tcp_socket.erlgen_udp.erlglobal.erlglobal_group.erlglobal_search.erlgroup.erlgroup_history.erlheart.erlhipe_ext_format.hrlhipe_unified_loader.erlinet.erlinet6_sctp.erlinet6_tcp.erlinet6_tcp_dist.erlinet6_udp.erlinet_boot.hrlinet_config.erlinet_config.hrlinet_db.erlinet_dns.erlinet_dns.hrlinet_dns_record_adts.hrlinet_gethost_native.erlinet_hosts.erlinet_int.hrlinet_parse.erlinet_res.erlinet_res.hrlinet_sctp.erlinet_tcp.erlinet_tcp_dist.erlinet_udp.erlkernel.erlkernel_config.erlkernel_refc.erllocal_tcp.erllocal_udp.erllogger.erllogger_backend.erllogger_config.erllogger_disk_log_h.erllogger_filters.erllogger_formatter.erllogger_h_common.erllogger_h_common.hrllogger_handler_watcher.erllogger_internal.hrllogger_olp.erllogger_olp.hrllogger_proxy.erllogger_server.erllogger_simple_h.erllogger_std_h.erllogger_sup.erlnet.erlnet_adm.erlnet_kernel.erlos.erlpg.erlpg2.erlram_file.erlraw_file_io.erlraw_file_io_compressed.erlraw_file_io_deflate.erlraw_file_io_delayed.erlraw_file_io_inflate.erlraw_file_io_list.erlraw_file_io_raw.erlrpc.erlseq_trace.erlsocket.erlstandard_error.erluser.erluser_drv.erluser_sup.erlwrap_log_reader.erlsrcappmegaco.erlmegaco_internal.hrlbinaryMEDIA-GATEWAY-CONTROL-prev3a.asnMEDIA-GATEWAY-CONTROL-prev3b.asnMEDIA-GATEWAY-CONTROL-prev3c.asnMEDIA-GATEWAY-CONTROL-v1.asnMEDIA-GATEWAY-CONTROL-v2.asnMEDIA-GATEWAY-CONTROL-v3.asnmegaco_ber_encoder.erlmegaco_ber_media_gateway_control_prev3a.erlmegaco_ber_media_gateway_control_prev3a.hrlmegaco_ber_media_gateway_control_prev3b.erlmegaco_ber_media_gateway_control_prev3b.hrlmegaco_ber_media_gateway_control_prev3c.erlmegaco_ber_media_gateway_control_prev3c.hrlmegaco_ber_media_gateway_control_v1.erlmegaco_ber_media_gateway_control_v1.hrlmegaco_ber_media_gateway_control_v2.erlmegaco_ber_media_gateway_control_v2.hrlmegaco_ber_media_gateway_control_v3.erlmegaco_ber_media_gateway_control_v3.hrlmegaco_binary_encoder.erlmegaco_binary_encoder_lib.erlmegaco_binary_name_resolver_prev3a.erlmegaco_binary_name_resolver_prev3b.erlmegaco_binary_name_resolver_prev3c.erlmegaco_binary_name_resolver_v1.erlmegaco_binary_name_resolver_v2.erlmegaco_binary_name_resolver_v3.erlmegaco_binary_term_id.erlmegaco_binary_term_id_gen.erlmegaco_binary_transformer_prev3a.erlmegaco_binary_transformer_prev3b.erlmegaco_binary_transformer_prev3c.erlmegaco_binary_transformer_v1.erlmegaco_binary_transformer_v2.erlmegaco_binary_transformer_v3.erlmegaco_per_encoder.erlmegaco_per_media_gateway_control_prev3a.erlmegaco_per_media_gateway_control_prev3a.hrlmegaco_per_media_gateway_control_prev3b.erlmegaco_per_media_gateway_control_prev3b.hrlmegaco_per_media_gateway_control_prev3c.erlmegaco_per_media_gateway_control_prev3c.hrlmegaco_per_media_gateway_control_v1.erlmegaco_per_media_gateway_control_v1.hrlmegaco_per_media_gateway_control_v2.erlmegaco_per_media_gateway_control_v2.hrlmegaco_per_media_gateway_control_v3.erlmegaco_per_media_gateway_control_v3.hrlenginemegaco_config.erlmegaco_config_misc.erlmegaco_digit_map.erlmegaco_edist_compress.erlmegaco_encoder.erlmegaco_erl_dist_encoder.erlmegaco_erl_dist_encoder_mc.erlmegaco_filter.erlmegaco_message_internal.hrlmegaco_messenger.erlmegaco_messenger_misc.erlmegaco_misc_sup.erlmegaco_monitor.erlmegaco_sdp.erlmegaco_stats.erlmegaco_sup.erlmegaco_timer.erlmegaco_trans_sender.erlmegaco_trans_sup.erlmegaco_transport.erlmegaco_user.erlmegaco_user_default.erlflexmegaco_flex_scanner.erlmegaco_flex_scanner_handler.erltcpmegaco_tcp.erlmegaco_tcp.hrlmegaco_tcp_accept.erlmegaco_tcp_accept_sup.erlmegaco_tcp_connection.erlmegaco_tcp_connection_sup.erlmegaco_tcp_sup.erltextmegaco_compact_text_encoder.erlmegaco_compact_text_encoder_prev3a.erlmegaco_compact_text_encoder_prev3b.erlmegaco_compact_text_encoder_prev3c.erlmegaco_compact_text_encoder_v1.erlmegaco_compact_text_encoder_v2.erlmegaco_compact_text_encoder_v3.erlmegaco_pretty_text_encoder.erlmegaco_pretty_text_encoder_prev3a.erlmegaco_pretty_text_encoder_prev3b.erlmegaco_pretty_text_encoder_prev3c.erlmegaco_pretty_text_encoder_v1.erlmegaco_pretty_text_encoder_v2.erlmegaco_pretty_text_encoder_v3.erlmegaco_text_gen_prev3a.hrlmegaco_text_gen_prev3b.hrlmegaco_text_gen_prev3c.hrlmegaco_text_gen_v1.hrlmegaco_text_gen_v2.hrlmegaco_text_gen_v3.hrlmegaco_text_mini_decoder.erlmegaco_text_mini_parser.erlmegaco_text_mini_parser.hrlmegaco_text_mini_parser.yrlmegaco_text_parser_prev3a.erlmegaco_text_parser_prev3a.hrlmegaco_text_parser_prev3a.yrlmegaco_text_parser_prev3b.erlmegaco_text_parser_prev3b.hrlmegaco_text_parser_prev3b.yrlmegaco_text_parser_prev3c.erlmegaco_text_parser_prev3c.hrlmegaco_text_parser_prev3c.yrlmegaco_text_parser_v1.erlmegaco_text_parser_v1.hrlmegaco_text_parser_v1.yrlmegaco_text_parser_v2.erlmegaco_text_parser_v2.hrlmegaco_text_parser_v2.yrlmegaco_text_parser_v3.erlmegaco_text_parser_v3.hrlmegaco_text_parser_v3.yrlmegaco_text_scanner.erlmegaco_text_tokens.hrludpmegaco_udp.erlmegaco_udp.hrlmegaco_udp_server.erlmegaco_udp_sup.erlsrcmnesia.erlmnesia.hrlmnesia_app.erlmnesia_backend_type.erlmnesia_backup.erlmnesia_bup.erlmnesia_checkpoint.erlmnesia_checkpoint_sup.erlmnesia_controller.erlmnesia_dumper.erlmnesia_event.erlmnesia_ext_sup.erlmnesia_frag.erlmnesia_frag_hash.erlmnesia_index.erlmnesia_kernel_sup.erlmnesia_late_loader.erlmnesia_lib.erlmnesia_loader.erlmnesia_locker.erlmnesia_log.erlmnesia_monitor.erlmnesia_recover.erlmnesia_registry.erlmnesia_rpc.erlmnesia_schema.erlmnesia_snmp_hook.erlmnesia_sp.erlmnesia_subscr.erlmnesia_sup.erlmnesia_text.erlmnesia_tm.erlc_srcodbcserver.codbcserver.hsrcodbc.erlodbc_app.erlodbc_internal.hrlodbc_sup.erlsrccpu_sup.ccpu_sup.erldisksup.erlmemsup.cmemsup.erlmemsup.hrlnteventlog.erlos_mon.erlos_mon_mib.erlos_mon_sysinfo.erlos_sup.erlsrcleex.erlyecc.erlyeccparser.erlyeccscan.erlsrcpubkey_cert.erlpubkey_cert_records.erlpubkey_crl.erlpubkey_moduli.hrlpubkey_ocsp.erlpubkey_pbe.erlpubkey_pem.erlpubkey_ssh.erlpublic_key.erlsrcappmon_info.erldbg.erldyntrace.erlerts_alloc_config.erlmsacc.erlobserver_backend.erlruntime_tools.erlruntime_tools_sup.erlscheduler.erlsystem_information.erlttb_autostart.erlsrcalarm_handler.erlerlsrv.erlformat_lib_supp.erlmisc_supp.erlrb.erlrb_format_supp.erlrelease_handler.erlrelease_handler_1.erlsasl.erlsasl_report.erlsasl_report_file_h.erlsasl_report_tty_h.erlsystools.erlsystools.hrlsystools_lib.erlsystools_make.erlsystools_rc.erlsystools_relup.erlsrcagentsnmp_community_mib.erlsnmp_framework_mib.erlsnmp_generic.erlsnmp_generic_mnesia.erlsnmp_index.erlsnmp_notification_mib.erlsnmp_shadow_table.erlsnmp_standard_mib.erlsnmp_target_mib.erlsnmp_user_based_sm_mib.erlsnmp_view_based_acm_mib.erlsnmpa.erlsnmpa_acm.erlsnmpa_agent.erlsnmpa_agent_sup.erlsnmpa_app.erlsnmpa_atl.hrlsnmpa_authentication_service.erlsnmpa_conf.erlsnmpa_discovery_handler.erlsnmpa_discovery_handler_default.erlsnmpa_error.erlsnmpa_error_io.erlsnmpa_error_logger.erlsnmpa_error_report.erlsnmpa_get.erlsnmpa_get_lib.erlsnmpa_get_mechanism.erlsnmpa_internal.hrlsnmpa_local_db.erlsnmpa_mib.erlsnmpa_mib_data.erlsnmpa_mib_data_tttn.erlsnmpa_mib_lib.erlsnmpa_mib_storage.erlsnmpa_mib_storage_dets.erlsnmpa_mib_storage_ets.erlsnmpa_mib_storage_mnesia.erlsnmpa_misc_sup.erlsnmpa_mpd.erlsnmpa_net_if.erlsnmpa_net_if_filter.erlsnmpa_network_interface.erlsnmpa_network_interface_filter.erlsnmpa_notification_delivery_info_receiver.erlsnmpa_notification_filter.erlsnmpa_set.erlsnmpa_set_lib.erlsnmpa_set_mechanism.erlsnmpa_supervisor.erlsnmpa_svbl.erlsnmpa_symbolic_store.erlsnmpa_target_cache.erlsnmpa_trap.erlsnmpa_usm.erlsnmpa_vacm.erlsnmpa_vacm.hrlappsnmp.erlsnmp_app.erlsnmp_app_sup.erlsnmp_internal.hrlcompilersnmpc.erlsnmpc.hrlsnmpc.srcsnmpc_lib.erlsnmpc_lib.hrlsnmpc_mib_gram.erlsnmpc_mib_gram.yrlsnmpc_mib_to_hrl.erlsnmpc_misc.erlsnmpc_misc.hrlsnmpc_tok.erlmanagersnmpm.erlsnmpm_atl.hrlsnmpm_conf.erlsnmpm_config.erlsnmpm_internal.hrlsnmpm_misc_sup.erlsnmpm_mpd.erlsnmpm_net_if.erlsnmpm_net_if_filter.erlsnmpm_net_if_mt.erlsnmpm_network_interface.erlsnmpm_network_interface_filter.erlsnmpm_server.erlsnmpm_server_sup.erlsnmpm_supervisor.erlsnmpm_user.erlsnmpm_user_default.erlsnmpm_user_old.erlsnmpm_usm.erlsnmpm_usm.hrlmiscsnmp_conf.erlsnmp_config.erlsnmp_debug.hrlsnmp_log.erlsnmp_mini_mib.erlsnmp_misc.erlsnmp_note_store.erlsnmp_pdus.erlsnmp_usm.erlsnmp_verbosity.erlsnmp_verbosity.hrlsrcssh.erlssh.hrlssh_acceptor.erlssh_acceptor_sup.erlssh_agent.erlssh_agent.hrlssh_app.erlssh_auth.erlssh_auth.hrlssh_bits.erlssh_channel.erlssh_channel_sup.erlssh_cli.erlssh_client_channel.erlssh_client_key_api.erlssh_connect.hrlssh_connection.erlssh_connection_handler.erlssh_connection_sup.erlssh_controller.erlssh_daemon_channel.erlssh_dbg.erlssh_file.erlssh_info.erlssh_io.erlssh_message.erlssh_no_io.erlssh_options.erlssh_server_channel.erlssh_server_key_api.erlssh_sftp.erlssh_sftpd.erlssh_sftpd_file.erlssh_sftpd_file_api.erlssh_shell.erlssh_subsystem_sup.erlssh_sup.erlssh_system_sup.erlssh_tcpip_forward_acceptor.erlssh_tcpip_forward_acceptor_sup.erlssh_tcpip_forward_client.erlssh_tcpip_forward_srv.erlssh_transport.erlssh_transport.hrlssh_xfer.erlssh_xfer.hrlsshc_sup.erlsshd_sup.erlsrcdtls_connection.erldtls_connection.hrldtls_connection_sup.erldtls_gen_connection.erldtls_handshake.erldtls_handshake.hrldtls_listener_sup.erldtls_packet_demux.erldtls_record.erldtls_record.hrldtls_server_session_cache_sup.erldtls_server_sup.erldtls_socket.erldtls_sup.erldtls_v1.erlinet6_tls_dist.erlinet_tls_dist.erlssl.erlssl_admin_sup.erlssl_alert.erlssl_alert.hrlssl_api.hrlssl_app.erlssl_certificate.erlssl_cipher.erlssl_cipher.hrlssl_cipher_format.erlssl_client_session_cache_db.erlssl_config.erlssl_connection.hrlssl_connection_sup.erlssl_crl.erlssl_crl_cache.erlssl_crl_cache_api.erlssl_crl_hash_dir.erlssl_dh_groups.erlssl_dist_admin_sup.erlssl_dist_connection_sup.erlssl_dist_sup.erlssl_gen_statem.erlssl_handshake.erlssl_handshake.hrlssl_internal.hrlssl_listen_tracker_sup.erlssl_logger.erlssl_manager.erlssl_pem_cache.erlssl_pkix_db.erlssl_record.erlssl_record.hrlssl_server_session_cache.erlssl_server_session_cache_db.erlssl_server_session_cache_sup.erlssl_session.erlssl_session_cache_api.erlssl_srp.hrlssl_srp_primes.erlssl_sup.erlssl_upgrade_server_session_cache_sup.erltls_bloom_filter.erltls_client_ticket_store.erltls_connection.erltls_connection.hrltls_connection_1_3.erltls_connection_sup.erltls_dist_server_sup.erltls_dist_sup.erltls_dtls_connection.erltls_gen_connection.erltls_handshake.erltls_handshake.hrltls_handshake_1_3.erltls_handshake_1_3.hrltls_record.erltls_record.hrltls_record_1_3.erltls_record_1_3.hrltls_sender.erltls_server_session_ticket.erltls_server_session_ticket_sup.erltls_server_sup.erltls_socket.erltls_sup.erltls_v1.erlsrcarray.erlbase64.erlbeam_lib.erlbinary.erlc.erlcalendar.erldets.erldets.hrldets_server.erldets_sup.erldets_utils.erldets_v9.erldict.erldigraph.erldigraph_utils.erledlin.erledlin_expand.erlepp.erlerl_abstract_code.erlerl_anno.erlerl_bits.erlerl_compile.erlerl_error.erlerl_eval.erlerl_expand_records.erlerl_internal.erlerl_lint.erlerl_parse.erlerl_parse.yrlerl_posix_msg.erlerl_pp.erlerl_scan.erlerl_tar.erlerl_tar.hrlerror_logger_file_h.erlerror_logger_tty_h.erlescript.erlets.erleval_bits.erlfile_sorter.erlfilelib.erlfilename.erlgb_sets.erlgb_trees.erlgen.erlgen_event.erlgen_fsm.erlgen_server.erlgen_statem.erlio.erlio_lib.erlio_lib_format.erlio_lib_fread.erlio_lib_pretty.erllists.erllog_mf_h.erlmaps.erlmath.erlms_transform.erlorddict.erlordsets.erlotp_internal.erlotp_internal.hrlpool.erlproc_lib.erlproplists.erlqlc.erlqlc_pt.erlqueue.erlrand.erlrandom.erlre.erlsets.erlshell.erlshell_default.erlshell_docs.erlslave.erlsofs.erlstring.erlsupervisor.erlsupervisor_bridge.erlsys.erltimer.erlunicode.erlunicode_util.erluri_string.erlwin32reg.erlzip.erlsrcepp_dodger.erlerl_comment_scan.erlerl_prettypr.erlerl_recomment.erlerl_syntax.erlerl_syntax_lib.erlerl_tidy.erligor.erlmerl.erlmerl_transform.erlprettypr.erlsrctftp.erltftp.hrltftp_app.erltftp_binary.erltftp_engine.erltftp_file.erltftp_lib.erltftp_logger.erltftp_sup.erlc_srcerl_memory.cerl_memory_trace_block_table.cerl_memory_trace_block_table.hsrccover.erlcprof.erleprof.erlfprof.erlinstrument.erllcnt.erlmake.erltags.erlxref.erlxref.hrlxref_base.erlxref_compiler.erlxref_parser.erlxref_parser.yrlxref_reader.erlxref_scanner.erlxref_utils.erlsrcxmerl.app.srcxmerl.appup.srcxmerl.erlxmerl_b64Bin.erlxmerl_b64Bin.yrlxmerl_b64Bin_scan.erlxmerl_eventp.erlxmerl_html.erlxmerl_internal.hrlxmerl_lib.erlxmerl_otpsgml.erlxmerl_regexp.erlxmerl_sax_old_dom.erlxmerl_sax_old_dom.hrlxmerl_sax_parser.erlxmerl_sax_parser.hrlxmerl_sax_parser_latin1.erlxmerl_sax_parser_list.erlxmerl_sax_parser_utf16be.erlxmerl_sax_parser_utf16le.erlxmerl_sax_parser_utf8.erlxmerl_sax_simple_dom.erlxmerl_scan.erlxmerl_sgml.erlxmerl_simple.erlxmerl_text.erlxmerl_ucs.erlxmerl_uri.erlxmerl_validate.erlxmerl_xlate.erlxmerl_xml.erlxmerl_xpath.erlxmerl_xpath_lib.erlxmerl_xpath_parse.erlxmerl_xpath_parse.yrlxmerl_xpath_pred.erlxmerl_xpath_scan.erlxmerl_xs.erlxmerl_xsd.erlxmerl_xsd_type.erl/usr/lib64/erlang/lib/asn1-5.0.15.1//usr/lib64/erlang/lib/asn1-5.0.15.1/c_src//usr/lib64/erlang/lib/asn1-5.0.15.1/src//usr/lib64/erlang/lib/common_test-1.20.2.3//usr/lib64/erlang/lib/common_test-1.20.2.3/src//usr/lib64/erlang/lib/compiler-7.6.9.3//usr/lib64/erlang/lib/compiler-7.6.9.3/src//usr/lib64/erlang/lib/crypto-4.9.0.4//usr/lib64/erlang/lib/crypto-4.9.0.4/src//usr/lib64/erlang/lib/edoc-0.12//usr/lib64/erlang/lib/edoc-0.12/src//usr/lib64/erlang/lib/eldap-1.2.9//usr/lib64/erlang/lib/eldap-1.2.9/src//usr/lib64/erlang/lib/erl_docgen-1.0.2//usr/lib64/erlang/lib/erl_docgen-1.0.2/src//usr/lib64/erlang/lib/erl_interface-4.0.3.1//usr/lib64/erlang/lib/erl_interface-4.0.3.1/src//usr/lib64/erlang/lib/erl_interface-4.0.3.1/src/connect//usr/lib64/erlang/lib/erl_interface-4.0.3.1/src/decode//usr/lib64/erlang/lib/erl_interface-4.0.3.1/src/encode//usr/lib64/erlang/lib/erl_interface-4.0.3.1/src/epmd//usr/lib64/erlang/lib/erl_interface-4.0.3.1/src/global//usr/lib64/erlang/lib/erl_interface-4.0.3.1/src/misc//usr/lib64/erlang/lib/erl_interface-4.0.3.1/src/prog//usr/lib64/erlang/lib/erl_interface-4.0.3.1/src/registry//usr/lib64/erlang/lib/erts-11.2.2.18//usr/lib64/erlang/lib/erts-11.2.2.18/src//usr/lib64/erlang/lib/eunit-2.6//usr/lib64/erlang/lib/eunit-2.6/src//usr/lib64/erlang/lib/ftp-1.0.5//usr/lib64/erlang/lib/ftp-1.0.5/src//usr/lib64/erlang/lib/inets-7.3.2.3//usr/lib64/erlang/lib/inets-7.3.2.3/src//usr/lib64/erlang/lib/inets-7.3.2.3/src/http_client//usr/lib64/erlang/lib/inets-7.3.2.3/src/http_lib//usr/lib64/erlang/lib/inets-7.3.2.3/src/http_server//usr/lib64/erlang/lib/inets-7.3.2.3/src/inets_app//usr/lib64/erlang/lib/kernel-7.3.1.7//usr/lib64/erlang/lib/kernel-7.3.1.7/src//usr/lib64/erlang/lib/megaco-3.19.5.1//usr/lib64/erlang/lib/megaco-3.19.5.1/src//usr/lib64/erlang/lib/megaco-3.19.5.1/src/app//usr/lib64/erlang/lib/megaco-3.19.5.1/src/binary//usr/lib64/erlang/lib/megaco-3.19.5.1/src/engine//usr/lib64/erlang/lib/megaco-3.19.5.1/src/flex//usr/lib64/erlang/lib/megaco-3.19.5.1/src/tcp//usr/lib64/erlang/lib/megaco-3.19.5.1/src/text//usr/lib64/erlang/lib/megaco-3.19.5.1/src/udp//usr/lib64/erlang/lib/mnesia-4.19//usr/lib64/erlang/lib/mnesia-4.19/src//usr/lib64/erlang/lib/odbc-2.13.3.1//usr/lib64/erlang/lib/odbc-2.13.3.1/c_src//usr/lib64/erlang/lib/odbc-2.13.3.1/src//usr/lib64/erlang/lib/os_mon-2.6.1//usr/lib64/erlang/lib/os_mon-2.6.1/src//usr/lib64/erlang/lib/parsetools-2.2//usr/lib64/erlang/lib/parsetools-2.2/src//usr/lib64/erlang/lib/public_key-1.10.0.1//usr/lib64/erlang/lib/public_key-1.10.0.1/src//usr/lib64/erlang/lib/runtime_tools-1.16.1//usr/lib64/erlang/lib/runtime_tools-1.16.1/src//usr/lib64/erlang/lib/sasl-4.0.2//usr/lib64/erlang/lib/sasl-4.0.2/src//usr/lib64/erlang/lib/snmp-5.8.0.1//usr/lib64/erlang/lib/snmp-5.8.0.1/src//usr/lib64/erlang/lib/snmp-5.8.0.1/src/agent//usr/lib64/erlang/lib/snmp-5.8.0.1/src/app//usr/lib64/erlang/lib/snmp-5.8.0.1/src/compiler//usr/lib64/erlang/lib/snmp-5.8.0.1/src/manager//usr/lib64/erlang/lib/snmp-5.8.0.1/src/misc//usr/lib64/erlang/lib/ssh-4.11.1.6//usr/lib64/erlang/lib/ssh-4.11.1.6/src//usr/lib64/erlang/lib/ssl-10.3.1.5//usr/lib64/erlang/lib/ssl-10.3.1.5/src//usr/lib64/erlang/lib/stdlib-3.14.2.3//usr/lib64/erlang/lib/stdlib-3.14.2.3/src//usr/lib64/erlang/lib/syntax_tools-2.5//usr/lib64/erlang/lib/syntax_tools-2.5/src//usr/lib64/erlang/lib/tftp-1.0.2//usr/lib64/erlang/lib/tftp-1.0.2/src//usr/lib64/erlang/lib/tools-3.4.4//usr/lib64/erlang/lib/tools-3.4.4/c_src//usr/lib64/erlang/lib/tools-3.4.4/src//usr/lib64/erlang/lib/xmerl-1.3.27.1//usr/lib64/erlang/lib/xmerl-1.3.27.1/src/-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -gobs://build.suse.de/SUSE:Maintenance:32135/SUSE_SLE-15-SP3_Update/b51e5fcf547c6ae49a334068a3463551-erlang.SUSE_SLE-15-SP3_Updatedrpmxz5ppc64le-suse-linux   directoryC source, ASCII textASCII textASCII text, with very long linesHTML document, ASCII textHTML document, UTF-8 Unicode textUTF-8 Unicode textexported SGML document, ASCII textmakefile script, ASCII texta /usr/bin/env escript script, ASCII text executable?823t7&,utf-8557bc51f81c300a789c6cd35dba460f2c7428460a0db5013bd94bb77dabff6b5?P7zXZ !t/;!]"k%k&v]lN C&$ݣC.RI[94Fʉg<׋ľ8[y:!#?Zhܖ݌d-YpkfQɈi˭ErC9,0 .#ލmcttO D +%5 VVS3F2zd0^UQ>'Z%ӱo0]:!gp4q. C٘HT {`Ui_ G't>lJmtVo =krF?.péY 3$:'ZlZM?.o2Q%3fe KXOFc9\F9D^(#iH@)Կ }Y;QhSPf6Ē2{>ij_Z]Z-49bUim1G<2 ZΕ>wc+N-eFx25*Qʉp2 x$Wyng#8_R⇶w>A٭O;$fv T[AI{@4(0@(Ֆm;R-kfgbo"yʩ^nIYs?Ygf\lº ]߼~AHyq "~"#I`,e[b)YP1M5[W J`1eChBĚƏBIoDf&,+qUfADZYH\'sM@%,fRf>JlI|6,y8g|:|>*\h&ɤo}\֯D=F=M.UO4-o11Wy s2wРOxDsS<թVpd9^ C4e-Bgm h$_PBl$qzvv4[dhaG;n2A9e~.8cuq9Y D t |ȄGnnTߑCh!Qj3օ&8M?$ JVAw|r *MұFQ,u vexI0T @@Ǎ Nq #'h (Ȕ:a s N=ȽWg24ӫp)TW&|_f2(!OSIi`@R>jMCv˟ߪ\H Њ23!H=ҖΆ!W֭T[h6 GK)c4">rLYbyFg1H Mّڍ]٠d$͞{ ڭV6S*v /Jߞ֝ILfeI)O^ ˲ΜT]>_oպyIt^d;2K=vFw$Rj!v!k{w8<k vEƬL{u^Ѝ?ҟe\h5\~;/ttm7qLQ~e)lyMV1T{޿_gG飄 *_ii#bZqep)m fb:Bc&ˊ1Mrf}u`#S!nܑI1~Ϛ, 23dH^~vk4R"HA٪ˠ"sS.ӛ^sB.`\dJT~16NYG&qazĘ"`| [h6;6'U]i l_͗K܊o_K5*Ly 5<7l)D^T-rWK(Ԡ-l]FvPSp…AS9`W޼ pEaЕ>t7Scv8r фP7QMtdWKds|0:)`9-e6./ TESs$ ; :X\h3<%BE3)K{[Hq!1ڼ%Q,cԧ:F PYѳ!4Eu nF1,H&A\ #"Kj9ݾQsaZ=tETnЈPDx`l *5$" <&G }ŝVj0j$ubN՝8mLE9h M ni٤ٲߠ*tk8l',zL{laIc/ ǯOdZLy;UX(`q`W!<1ʙi]_iB(XC/!{ΤQ r2$5Ő6y_%|_qP e>)S2}>G 9ox*<ܱbK9X:@UAfNo2]O5M `Jrƕ%w+Q*6V ZH[q] Z;9ёO-z6D1a}ѓ d !U3-%ĝ XPU}Kl,W j~X^_Bsu#>\a*3uz+efhQrR&]%FҌHUw/W@HԣR)FG`ɑX_Iq-XWM_D%RXyTҚTW׆!ΛE3|R=UDoҢ8=c\pxHf&#y$Ej t! x[g]|0=- Į!,4mqEgG d/j87 ŏq 2^j,ܺbNOrm<[#%L8 e'x(Y(ĽHW,,QZEMNHFA}qp0|*إ_)Y&fֽ\U}} ~õd1l8@}՚8: 8hnyJЋ~i?)H3gv[. RRYW4J۾5],Sځ^˭DwV:'B?0iz8=) Qz$yڊ:, b495[L *+#nGبnOLbYK `QENpz[DB;8廘J/HzA穹kdӝxv%HEuD(WXqiAHau];_)ԣ:d?"mdFN7{Z Js[8ʲ8~ d<;O'#/K7&7ȾS[ڃYP(W|-aW,h.$`v ]vC:tA_G4H4\;ޯk{Q:ȸƥoX-fSuM/ gx] @^bQ]ɠ[+cr;}^VT͚T:(c]90ê(1q1ss9Σ~U8bo5W9gri*Q~y Ag_E'ԅ,:&kNu6fC1 W"(BD ](54"2Y-H.8~{/KRg99}eUJ? hQNmk$FAefMOjX<8lܠёvr: 40q)ijX_WU+ XJ.Mk]u $!nK:*ןˉYhrK\^TۘMNmii5gŋK+KR4?j'p,ճ3ml :O9G]/QL#5ՍΥ©"|U:h00z8RwxH,QW̴!MU3ZQыˤs+\ }'9o/;J6 +6G}bJ f^Y㱴sj!I7pJK\EamPyiVaqM+-Jt5Ʉݯݵ!1nݙB'mWKsˬ/@FЍS0˗YՙݘVl0ܢn^?;U{zB$L ->Ɔ7!Ċ_`nfM=}гY\(ha{d kxn`N .Io$=iFh.r]H[xzh sи^mxBLJ:?6|P0O-Ĥ]ץZ3Nηtp &)KQΜL\=4쨿+2e\fsW=GC8WQQLxWZ Su@8QջVEh?F]xۀKHxc۽5F^`4,ro ;.?r! 06}c|M0CY4V\M>Gt/;EױOZz*frj>R}"@A6'R]J7=+ͳ(֞:ZVE0[q[V=|Siӹ6GojߺX.:W1 {[Kd*Bfa;@M/`pC$N$9& J#޹!6CO7g!ē.o ʑWټ\_zp^{Ѓ4>ו|\|(tަSq'ndfWi9}+AUMɃjrJrs'*3ggi+*]*%vxKJ#h#Q[ѻFx[./&P=+Zuh#e'Z1A"3;8LQm˰)`$܄z/;bJtZG _(iɱIBat#`t\JvM:_qi[ `shNk,/9|zy_(wg%"\ 2htzY;(`-r-/ It@idMY?ЬI W*M~;S€"p#qGaif BfiMibP`" K͕*/¡1eB22۰\a 뛒|rJݟbYگ~hg4xC\2-fJ×[t@&FyL>6]rDX/}Te{3)6@.fcDԞ .'n 5>~.p)6u 'EbcR 򨔊 떅d2VRey\֦ۯ7/#r=Ic$O{Y2c J{0þy`+}_ǶѨVgE#g(,4"zZLeff/Ng+sM5}a5vfeK@{ 8\*$7ytp,T}E5?aU72b*b͠KL 1P DCyoeLeR޲. \Fo5fi ݼhRlRݢjdN`v&w6uYy⼤,{Db$Dy=>RXm:Gmc#6߸LG(Rìw\ZmdI1Y_4 ItW&6a#ݢ.SM~N\،x&Ĩ87-ZQ} Xcf#Lk~i:q"$'߰k׫n&)NđSR1@Q{S}|\Rn&;Ր_^ζې8PW百}rxg/rRI]pan.kp#}U~T:]^P,g -L&ogpikK5kx(c;I^&^'לZcF^6B-t4f) ) Z|c*8ҹT&n/,R eURyF6~_#_(ITe<{ -:q,WѲP 6Lǝv@. k:nCj*&Ɗ{2nMOyovN;JG4qLWJʸ\~sW^{Bеϟҏ*>0D {51Pf2B'Mpik~p_{!Ža+Mα8$(YA̫>5jLKƱZt2-ȾV9{SdY^K~HhS:۸ɧ"q_kV[&8pJ?NCjEYY' ֮+ A^ 1 3`'5TL1Ґf7{pJw!mؕܦ J%P\%Uкʿqf.1L;_gTfqAgKY>MLwJmg[Su{dHBCkq,0GAfIRpȡ N F9)6]vW-2q5#?`Mi7DEذ6rV9~;0d꼿N}S\ Tm9:E\kԘL-l*[hƖNȣ֘$.?I)X]Yogo.=)W05Q"5zJ`w'# Gb7'Mџ~nYKrTZ }SS.˟r"NG'J2rM, |oEM!nFK%θػA^kR$;Ss^8 lPWQ@{is][gM&E{JC) ؠkűPkރ^hY4%n֓jCmMۃ'yf[Jÿx5lŮiBiV$Ƶd)^@c2&q-M}ZR{U5G5` E13v6b"'~W"=Xăɔ)# ÷(N@F~퀱epBx]-'awȻM#%]I]{Zlm_9CI}&ǗPzμϪn0' &m>ӳgW%xzwn(V{cxCwA~ YZ